home *** CD-ROM | disk | FTP | other *** search
/ A.C.E. 2 / ACE CD 2.iso / FILES / DOCS / SBASEP4D.LHA / SuperBaseProDatabaseLang1.doc < prev    next >
Text File  |  1994-11-27  |  128KB  |  4,312 lines

  1.  
  2.  
  3.             SUPERBASE PROFESSIONAL
  4.              DATABASE MANAGEMENT LANGUAGE
  5.                  USER GUIDE
  6.  
  7.                    Part I
  8.  
  9. BEFORE YOU BEGIN...
  10.  
  11. This Volume presents you with two user guides,one for Superbase's Database
  12. Management Language (DML) and one for the Forms Editor. Although they are
  13. both under the same cover, they can be treated as separate manuals. Each
  14. has its own Contents, Index, chapter numbers and page numbers.
  15.  
  16. Note that the Forms Editor is a separate program from Superbase
  17. Professional. You will find instructions on how to install and load it on
  18. your computer in the Readme document which is supplied on the demonstration
  19. file disk. If you haven't done so already, you should read this document
  20. now. It also provides details of any features of Superbase Professional
  21. that are not covered in either Volume 1 or 2.
  22.  
  23.                 i
  24.  
  25. DML USER GUIDE
  26. CONTENTS
  27.  
  28. CHAPTER 1
  29. INTRODUCTION TO DML                        1-1
  30. Using this guide                        1-1
  31. CHAPTER 2        
  32. OVERVIEW                            2-1
  33. Operating Modes                            2-1
  34. Keywords and Reserved Words                    2-1
  35. Commands and Statements                        2-2
  36. Variables                            2-2
  37. File Types                            2-4
  38. Fields                                2-5
  39. Date and Time                            2-6
  40. Functions                            2-6
  41. Operators                            2-7
  42. Constants                            2-13
  43. Expressions                            2-14
  44. Line Format and Labels                        2-14
  45. Syntax                                2-15
  46. CHAPTER 3
  47. THE PROGRAM EDITOR                        3-1
  48. Creating a New Program                        3-3
  49. Editing a Program                        3-4
  50. Using the Command Line                        3-6
  51. Loading a Program                        3-7
  52. Saving a Program                        3-7
  53. Running a Program                        3-8
  54. Creating a Start Up Program                    3-8
  55. CHAPTER 4
  56. FUNCTION KEYS                            4-1
  57. Setting a Function Key                        4-1
  58. Function Keys for Commands                    4-2
  59. Functions Keys for Text and Program Entry            4-3
  60.  
  61.                 ii
  62.  
  63. Editing a Function Key String                    4-4
  64. Function Key Files                        4-5
  65. CHAPTER 5
  66. KEYWORD REFERENCE GUIDE                        5-1
  67. Syntax Conventions                        5-1
  68. ? Commands                            5-3
  69. ?                                5-8
  70. ? DIRECTORY                            5-9
  71. ? LIST                                5-9
  72. ? MEMORY                            5-10
  73. ? QUERY                                5-10
  74. ? STATUS                            5-11
  75. ? TEXT                                5-12
  76. ABS                                5-13
  77. ADD                                5-14
  78. AFTER GROUP                            5-17
  79. AFTER REPORT                            5-18
  80. ASC                                5-18
  81. ASK                                5-19
  82. ATN                                5-20
  83. BEFORE GROUP                            5-21
  84. BELL                                5-22
  85. BLANK                                5-22
  86. BREAK                                5-23
  87. CALL                                5-24
  88. CHAIN                                5-24
  89. CHR$                                5-24
  90. CLEAR                                5-26
  91. CLOSE                                5-26
  92. CLOSE FIELDS                            5-27
  93. CLOSE FILE                            5-28
  94. CLOSE FORM                            5-28
  95. CLS                                5-29
  96. COL                                5-29
  97. COPY                                5-30
  98. COS                                5-30
  99. CREATE                                5-31
  100. CREATE INDEX                            5-32
  101. DATA                                5-33
  102. DATE$                                5-34
  103. DATEBASE                            5-35
  104.  
  105.                 iii
  106.  
  107. DAY                                5-36
  108. DAY$                                5-37
  109. DAYS                                5-38
  110. DELETE                                5-39
  111. DIM                                5-39
  112. DIRECTORY                            5-40
  113. DISKSPACE                            5-41
  114. EDIT                                5-42
  115. EJECT                                5-43
  116. END                                5-44
  117. END GROUP                            5-44
  118. END HEADING                            5-45
  119. END REPORT                            5-45
  120. ENTER                                5-46
  121. EOF                                5-48
  122. ERASE                                5-49
  123. ERR$                                5-50
  124. ERRNO                                5-50
  125. EXECUTE                                5-51
  126. EXP                                5-52
  127. EXPORT                                5-53
  128. FCASE$                                5-55
  129. FILE                                5-56
  130. FIX                                5-57
  131. FOOTING                                5-58
  132. FOR TO NEXT                            5-58
  133. FORM                                5-60
  134. FOUND                                5-60
  135. FREE                                5-61
  136. GET                                5-62
  137. GOSUB                                5-62
  138. GOTO                                5-63
  139. GROUP                                5-64
  140. HEADING                                5-65
  141. HOME                                5-65
  142. HRS                                5-66
  143. IF THEN ELSE                            5-66
  144. IMPORT                                5-69
  145. INDEX                                5-70
  146. INPUT                                5-71
  147. INSTR                                5-72
  148. INT                                5-74
  149.  
  150.                 iv
  151.  
  152. KEY                                5-75
  153. LABELS                                5-77
  154. LCASE$                                5-78
  155. LEFT$                                5-78
  156. LEN                                5-80
  157. LET                                5-80
  158. LIST                                5-82
  159. LOAD                                5-83
  160. LOCATE                                5-84
  161. LOG                                5-85
  162. LOOKUP                                5-85
  163. LTRIM$                                5-87
  164. MAKE                                5-88
  165. MENU                                5-89
  166. MENU CLEAR                            5-90
  167. MENU ON                                5-90
  168. MERGE                                5-92
  169. MID$                                5-92
  170. MINS                                5-94
  171. MOD                                5-94
  172. MODIFY                                5-95
  173. MONTH                                5-96
  174. MONTH$                                5-97
  175. NEW                                5-98
  176. NEWLINE                                5-98
  177. NOW                                5-99
  178. NUMBASE                                5-100
  179. ON ERROR                            5-100
  180. ON GOSUB                            5-102
  181. ON GOTO                                5-102
  182. OPEN                                5-103
  183. OPEN FORM                            5-104
  184. OPEN FIELDS                            5-104
  185. OPEN FILE                            5-105
  186. ORDER                                5-106
  187. OUTPUT TO                            5-109
  188. PASSWORD                            5-110
  189. PCOL                                5-110
  190. POSITION                            5-111
  191. PRINT                                5-112
  192. PROTECT                                5-114
  193. PROW                                5-114
  194.  
  195.                 v
  196.  
  197. QUIT                                5-115
  198. READ                                5-116
  199. RECCOUNT                            5-116
  200. REM                                5-117
  201. REMOVE FILE                            5-118
  202. REMOVE FROM                            5-118
  203. REMOVE INDEX                            5-119
  204. RENAME                                5-120
  205. REORGANIZE                            5-120
  206. REPLICATE                            5-121
  207. REPORT                                5-122
  208. REQUEST                                5-123
  209. RESTORE                                5-125
  210. RESUME                                5-126
  211. RETURN                                5-127
  212. RIGHT$                                5-127
  213. RND                                5-128
  214. ROW                                5-129
  215. RUN                                5-129
  216. SAVE                                5-130
  217. SAVE FILE                            5-130
  218. SAY                                5-131
  219. SCRDUMP                                5-132
  220. SECS                                5-132
  221. SELECT commands                            5-132
  222. SELECT CURRENT                            5-133
  223. SELECT DUPLICATE                        5-134
  224. SELECT FIRST                            5-134
  225. SELECT KEY                            5-135
  226. SELECT LAST                            5-136
  227. SELECT NEXT                            5-136
  228. SELECT PREVIOUS                            5-136
  229. SELECT REMOVE                            5-137
  230. SELECT WHERE                            5-137
  231. Query Language Commands                        5-138
  232. SELECT                                5-140
  233. SER                                5-142
  234. SET                                5-142
  235. SET BUFFERS                            5-144
  236. SET PAGING                            5-144
  237. SET view mode                            5-145
  238. SGN                                5-145
  239.  
  240.                 vi
  241.  
  242. SHOW                                5-145
  243. SIN                                5-147
  244. SPACE$                                5-147
  245. SQR                                5-148
  246. STORE                                5-148
  247. STR$                                5-150
  248. TAN                                5-151
  249. THOUSECS                            5-151
  250. TIME$                                5-152
  251. TIMEVAL                                5-152
  252. TODAY                                5-153
  253. TRIM$                                5-154
  254. UCASE$                                5-154
  255. UPDATE                                5-155
  256. VAL                                5-156
  257. VIEW                                5-157
  258. WAIT                                5-157
  259. WHERE                                5-158
  260. WHILE WEND                            5-160
  261. YEAR                                5-160
  262. CHAPTER 6
  263. QUICK REFERENCE GUIDE                        6-1
  264. INDEX                                I-1
  265.  
  266.                 vii
  267.  
  268.              CHAPTER 1 - INTRODUCTION TO DML
  269.  
  270. Welcome to Superbase Professional's Database Management Language (DML). DML
  271. is based on the programming language Basic. It includes most of the
  272. standard Basic commands and functions, but supplements them with a large
  273. number of commands and functions that are specific to database management.
  274.  
  275. The database commands duplicate the controls that Superbase Professional
  276. provides through its menus and dialogs. This means that almost all of
  277. Superbase's file and record handling facilities are available under program
  278. control. In fact, apart from Fast Forwards, Rewind and Duplicate, you can
  279. now carry out any Superbase operation using a single program command.
  280.  
  281. Once you have familiarized yourself with Superbase's controls, the
  282. corresponding program, you may find the idea of learning a program language
  283. daunting. But as far as DML is concerned, a little goes long way, and you
  284. do not need to be fully conversant with the language in order to take
  285. advantage of it.
  286.  
  287. In effect, you are already following a program sequence every time you
  288. perform a task which involves a series of menu operations. Writing a
  289. program that performs the task for you is simply a matter of entering
  290. commands in the same sequence. Generally, you will be able to find a single
  291. command to duplicate each of the menu operations.
  292.  
  293. As you acquire more expertise, you can move on, building bigger and more
  294. complex programs by combining routines, until you have fully automated your
  295. database system. When you're ready, you can incorporate Superbase forms
  296. into your programs, taking advantage of their built-in facilities for
  297. generating and retrieving records in several files at once.
  298.  
  299. At the highest level, you can specify your own pull-down menus, replacing
  300. the standard Superbase menus with the options that are relevant to the job
  301. in hand. And you can customize your application to an even more detailed
  302. level by creating your own pop-up selection panels to guide the user's
  303. choices.
  304.  
  305.                 1-1
  306.  
  307. USING THIS GUIDE
  308.  
  309. Before reading this guide, you will need to be familiar with Superbase's
  310. menu and keyboard controls. Many of DML's commands provide a program
  311. equivalent of a menu or keyboard option, and the descriptions given here
  312. presume that you already know how to use the corresponding option.
  313.  
  314. However, once you have mastered Superbase itself, you do not need to read
  315. this book all the way through. As a reference guide, it can be consulted as
  316. and when it is needed.
  317.  
  318. HOW TO USE THIS GUIDE
  319.  
  320. Chapter 2, Overview, describes the most basic features of DML. You can
  321. think of it as a grammar book for the language. It sorts DML's 'keywords'
  322. and other components into different groups and, more importantly, sets out
  323. all the rules for using them. For example, it specifies the maximum length
  324. for a program line,  and gives the rules for creating variable names.
  325.  
  326. Chapter 3 explains how to use the Program Editor. This covers entering and
  327. editing programs, storing them on disk and loading them from disk. It also
  328. explains how to execute programs, and how to create a 'start up' program
  329. which will be executed automatically when you start a session with
  330. Superbase.
  331.  
  332. Chapter 4 describes Superbase's function key facility. It explains how to
  333. define the function keys and discusses various applications for them.
  334.  
  335. Chapter 5, Keyword Reference Guide, forms the bulk of the manual. In this
  336. chapter, you will find an entry for each DML keyword, which gives the
  337. keyword's syntax and describes its usage. The entries are in alphabetical
  338. order starting with the ? command. At the front of Chapter 5, there is an
  339. explanation of the conventions used to show a keyword's syntax.
  340.  
  341. Chapter 6 is a Quick Reference Guide. It gives the syntax for each DML
  342. keyword together with a brief description of its function.
  343.  
  344.                 1-2
  345.  
  346.             CHAPTER 2 - OVERVIEW
  347.  
  348. OPERATING MODES
  349.  
  350. DML has two modes of operation: direct mode and program mode.
  351.  
  352. DIRECT MODE
  353.  
  354. In this mode, DML executes instructions as soon as you have typed them in.
  355. First you need to select the Command option from the Program Menu. Then
  356. enter your instructions - a single command or a line of commands separated
  357. by colons - in the command line window; when you select 'OK' or press the
  358. Return key, DML will carry out the instructions straight away. The command
  359. line window is 64 characters long but you can enter up to 255 characters
  360. and move within the window using the cursor keys.
  361.  
  362. PROGRAM MODE
  363.  
  364. In program mode, DML does not execute commands as you enter them. Instead
  365. they are stored in memory and executed only when the program is run. The
  366. main difference between this mode and direct mode is that with the latter
  367. you can only enter and execute one line at time; program mode allows you to
  368. enter a series of instruction lines which are carried out in sequence.
  369. Program lines can be up to 255 characters long.
  370.  
  371. OTHER DML APPLICATIONS
  372.  
  373. DML's functions, along with its operators and variables, can also be used
  374. in other Superbase operations - such as field definition validations and
  375. calculations, filter conditions, update commands and query derived field
  376. definitions.
  377.  
  378. KEYWORDS AND RESERVED WORDS
  379.  
  380. Any word that DML recognizes as a specific instruction, or part of an
  381. instruction, is known as a keyword.
  382.  
  383. A keyword cannot be used as a variable name, a field name, or a label. In
  384. this context, keywords are also knows as reserved words - DML reserves them
  385. for its own use, and will interpret then as such even if they are in lower
  386. case.
  387.  
  388.                 2-1
  389.  
  390. A reserved word can, however, from part of a name. For example, you can
  391. incorporate the reserved word TO in any of the following ways:
  392.  
  393. TOP:        (in a label)
  394. TOTAL%        (a numeric variable)
  395. tot$        (in a string variable)
  396. TOTALS$        (in a field name)
  397.  
  398. But you cannot use it like this:
  399.  
  400. TO:
  401. TO%
  402. TO$
  403.  
  404. COMMANDS AND STATEMENTS
  405.  
  406. Some programming manuals make a strict division between two kinds of
  407. executable instructions - commands and statements. Commands are those
  408. instructions which are generally executed in direct mode, while statements
  409. are instructions that can only appear in a program line.
  410.  
  411. In DML there are only a few instructions that cannot be used in both
  412. operating modes and so the two terms are used almost interchangeably. Thus
  413. we refer to a line with more than one instruction on it as a
  414. multi-statement line; but it could equally well be called a multi-command
  415. line.
  416.  
  417. VARIABLES
  418.  
  419. There are three types of variables in DML: string variables, numeric
  420. variables,  and arrays. In many circumstances, the fields in a Superbase
  421. file can also be treated in the same way as variables.
  422.  
  423. VARIABLE NAMES
  424.  
  425. Numeric variables must end with the '%' character, string variables end
  426. with an '$' character. Apart from this, the names for both types of
  427. variable follow the same rules:
  428.  
  429. Variable names have a maximum length of 14 characters and a minimum length
  430. of 1 character (excluding '%' or '$').
  431.  
  432. The first character of the name must be a letter in the range 'a' to 'z'
  433. but the remaining characters can be either alphabetic or numeric.
  434.  
  435.                 2-2
  436.  
  437. DML is not case sensitive; 'abc%' is the same as 'ABC%', and 'abc$' is the
  438. same as 'ABC$'.
  439.  
  440. A variable name can contain a reserved word, but cannot consist of just a
  441. reserved word and the variable suffix, % or $. For example, names like
  442. 'lef$',  'cos%', 'report$' and 'FILE%' are forbidden. See Appendix A for
  443. the list of reserved words.
  444.  
  445. Before using a variable, you must define it by assigning a value to it.
  446. This means that the first occurrence of a variable should be in an
  447. assignment statement, with the variable to the left of the equal sign.
  448. Suppose, for example,  you instructed DML to display the value of a$, using
  449. the command
  450.  
  451.     ? a$
  452.  
  453. If you have not assign a value to a$ beforehand, DML will issue the error
  454. message:
  455.  
  456.     Can't do this
  457.     Variable not defined
  458.  
  459. To avoid this error message, you would have to define a$ at an earlier
  460. stage in the program, with line such as
  461.  
  462.     a$="Hello"
  463.  
  464. or
  465.  
  466.     a$=""
  467.  
  468. The double quotes are known as the 'empty string'. They allow you to define
  469. a string variable without actually assigning a specific value; they are
  470. also used to clear the contents of string variables.
  471.  
  472. There are, however, a number of exceptions to the rule about defining
  473. variables. Some statements - READ, ASK, WAIT, and INPUT - define variables
  474. implicitly when they are used for the first time. Thus DML would accept the
  475. line:
  476.  
  477.     READ a$
  478.  
  479. even if you had not assigned a value to a$ previously.
  480.  
  481. NUMERIC VARIABLES
  482.  
  483. DML's numeric variables hold numbers at 13 figure accuracy, but if
  484. displayed or printed, they are shown in the current default numeric format.
  485. Note that there is only one type of numeric variable. In some versions of
  486. Basic, the % suffix indicates that the variable can only store whole
  487. numbers (integers): in DML, the
  488.  
  489.                 2-3
  490.  
  491. same numeric variable can be used for both whole numbers and floating point
  492. numbers.
  493.  
  494. STRING VARIABLES
  495.  
  496. String variables are used to hold ASCII characters - usually alphanumeric
  497. text. The maximum length of data that can be held in a string variable is
  498. 255 characters.
  499.  
  500. ARRAYS
  501.  
  502. DML supports string and numeric arrays with up to three dimensions. The
  503. maximum number of elements in an array is limited only by the amount of
  504. memory available.
  505.  
  506. The rules for array names are the same as those for numeric and string
  507. variables. Numeric arrays must end with '%' character, string arrays must
  508. end with '$' character.
  509.  
  510. SYSTEM VARIABLES
  511.  
  512. TODAY, NOW and ERRNO are variables which are supplied by DML. TODAY gives
  513. the system date, NOW gives the system time. DML treats these in the same
  514. way as date and time fields; that is, although they are numeric variables,
  515. they are displayed in the current date or time format. If the time of day
  516. is 9:41 and the system clock has been set to this time. NOW would display
  517. it as 9:41. But it stores this as 34919810 - the number of thousandths of a
  518. second from midnight to 9:41. ERRNO returns the number of the last error
  519. that occurred.
  520.  
  521. You cannot assign a value to a system variable, but otherwise TODAY, NOW
  522. and ERRNO can used in the same way as any other numeric variable.
  523.  
  524. FILE TYPES
  525.  
  526. When you save a file using one of the SAVE options, DML automatically adds
  527. one of the following extension names to the file name:
  528.  
  529.     aaa.sbf is a database file
  530.     aaa.sbd is a file definition for a database file
  531.     aaa.sbk is a function key file
  532.     aaa.sbp is a program file
  533.     aaa.sbq is a Query file
  534.     aaa.sbt is a text file saved from the text editor
  535.  
  536.                 2-4
  537.  
  538.     aaa.sub is an Update file
  539.     aaa.### is an index (where ### is a number from 001 to 999)
  540.  
  541. DML stores program files, Text Editor files, database files and index files
  542. in its own format (for example, it tokenizes keywords in program files and
  543. stores formatting information with documents saved in the Text Editor). The
  544. others are all text files and only contain ASCII characters.
  545.  
  546. FIELDS
  547.  
  548. With a few exceptions, you can use fields in the same way as variables. For
  549. instance, you can input data directly to fields; you can supply a field
  550. name as the argument for a function; and you can assign values to fields.
  551.  
  552. Fieldnames must conform to the rules for field names as set out in Volume
  553. 1, i.e.:
  554.  
  555.     The maximum length is 15 characters.
  556.     The minimum length is one character.
  557.  
  558. They must begin with an alphabetic character, but can thereafter contain
  559. any alphanumeric characters. They can also contain the underscore and space
  560. characters. Superbase will accept a field name with several spaces embedded
  561. in it - i.e., 'a bc d' is a valid name - but this is not recommended.
  562.  
  563. DML is not case sensitive; 'abc' is the same as 'ABC'.
  564.  
  565. The file a field belongs to must be open; otherwise the following requester
  566. appears:
  567.  
  568.     Can't do this....
  569.     'field name'
  570.     Can't find this field
  571.  
  572. Where more than one file is open and there are two files with the same
  573. field name, the file name must be given as an extension to the field name
  574. and the two must be separated by a full stop. This enables DML to identify
  575. the field you are referring to.
  576.  
  577. NOTE: FAILING TO SUPPLY FILE EXTENSION NAMES TO FIELDS MAY RESULT IN
  578. INCORRECT DATA, ALTHOUGH IT DOES NOT CAUSE AN ERROR.
  579.  
  580.                 2-5
  581.  
  582. If the file name contains spaces, it must be included within quotation
  583. marks,  e.g.:
  584.  
  585.     fielda.filea
  586.     name.Customers
  587.     Lastname."Customer File"
  588.  
  589. DATE AND TIME
  590.  
  591. Superbase stores dates as julian date numbers; that is, as the number of
  592. days from 31st December in the year zero. This means that date fields are
  593. numeric fields and hold their dates as numbers. When you display a date
  594. field, however,  Superbase automatically converts it to a more recognizable
  595. format: it takes the format which has been set in the file definition (see
  596. Chapter 2, Volume 1).
  597.  
  598. The date format only controls the way dates are displayed. You can enter a
  599. date from the keyboard in almost any format. For instance, the date might
  600. be shown on screen as 24/02/87, but you can type in a date like '28
  601. February, 1962' and DML will accept it.
  602.  
  603. Incidentally, DML does remember that eleven days were lost when the
  604. Gregorian Calendar reform was implemented (September 2nd, 1752 is followed
  605. by September 14th).
  606.  
  607. As with dates, DML stores the time in time fields as a numeric value, but
  608. displays it in a different format. The time is stored as the number of
  609. thousandths of a second from midnight. When you display the time, it is
  610. given in hours and minutes in either 12 or 24 hour format.
  611.  
  612. FUNCTIONS
  613.  
  614. Functions form one of the largest groups of DML keywords. Most of them
  615. perform a calculation on a number or a string, but there are also functions
  616. that give information about some aspect of the system. RECCOUNT, for
  617. example returns the number of records in a file, and FREE returns the
  618. amount of free memory space. Unlike a command, a function cannot be entered
  619. on its own as a statement. Thus:
  620.  
  621.     ? RECCOUNT ("address")
  622.  
  623.                 2-6
  624.  
  625.     NUMRECS%=RECCOUNT ("address")
  626.  
  627. are valid statements, but
  628.  
  629.     RECCOUNT ("address")
  630.  
  631. produces an error message.
  632.  
  633. All functions take an argument, which is enclosed in parentheses, and
  634. return a result. If the function calculates a result, the argument is what
  635. it works on. In the example above, "address" is the argument. It tells the
  636. function which file to count.
  637.  
  638. Depending on the function, the argument (or arguments) may be a field name,
  639. a file name, constant, a variable, or a combination of these connected by
  640. an operator to form an expression. You will find details of what kind of
  641. argument a function expects, in the Keyboard Reference section.
  642.  
  643. Although functions are usually classed as either string or numeric
  644. functions,  this does not always guarantee that they take a particular kind
  645. of argument. Numeric functions always take numeric arguments, but some
  646. string functions also expect a numeric argument. CHR$, for example, returns
  647. a string result from a numeric argument.
  648.  
  649. When it comes to finding out what type of result a function returns, there
  650. is a simple rule you can apply. Functions which have a $ character at the
  651. end, return their results as string data; if they do not end in a $, they
  652. return a numeric result. There is one exception to this rule - REPLICATE,
  653. which returns a string result, despite the fact that it does not have a $
  654. at the end.
  655.  
  656. OPERATORS
  657.  
  658. DML provides three types of operators: arithmetic, relational and string.
  659.  
  660. ARITHMETIC OPERATORS
  661.  
  662. Addition
  663.  
  664. The plus sign specifies that the operand on the right is added to the
  665. operand on the left, e.g.:
  666.  
  667.     2 + 2
  668.     a% + b% + c%
  669.     a% + 12.225
  670.  
  671.                 2-7
  672.  
  673. Subtraction
  674.  
  675. The minus sign specifies that the operand on the right will be subtracted
  676. from the operand on the left e.g.:
  677.  
  678.     -3
  679.     -a%
  680.  
  681. Multiplication
  682.  
  683. The asterisk is recognised by DML as the multiplication symbol and
  684. specifies that the operand on the left is multiplied by the operand on the
  685. right, e.g.:
  686.  
  687.     3 * 2
  688.     a% * b%
  689.     a% * 12.225
  690.  
  691. Division
  692.  
  693. The slash is recognized by DML as the division symbol and specifies that
  694. the operand on the left is divided by the operand on the right, e.g.:
  695.  
  696.     3 / 2
  697.     a% / b%
  698.     a% / 12.225
  699.  
  700. NOTE: UNLIKE IN MANY OTHER PROGRAMMING LANGUAGES, DIVISION BY ZERO DOES NOT
  701. CAUSE AN ERROR MESSAGE AND RETURNS A VALUE OF ZERO. THIS, OF COURSE, IS A
  702. FALSE RESULT,  AND YOU SHOULD CHECK NUMERICAL DATA TO ENSURE IT DOES NOT
  703. OCCUR.
  704.  
  705. Exponentiation
  706.  
  707. The up arrow (or caret) is recognized by DML as the exponentiation symbol
  708. and specifies that the operand on the left is raised to the power specified
  709. by the operand on the right (the exponent); that is, the operand on the
  710. left is multiplied by itself the number of times specified by the exponent.
  711. If the exponent is 2, the number is squared; if the exponent is 3, the
  712. number is cubed; if the exponent is 1/2, the square root of the number
  713. results, e.g.:
  714.  
  715.                 2-8
  716.  
  717.     3 ^ 2            (3 squared)
  718.     a% ^ b%        
  719.     a% ^ 12.225
  720.     a6 ^ 0.5        (the square root of 16)
  721.     27 ^ 0.33333333        (the cuberoot of 27)
  722.     3 ^ -2            (1/3 * 1/3)
  723.  
  724. Modulo arithmetic
  725.  
  726. MOD gives the remainder when the operand on the left is divided by the
  727. operand to the right, e.g.:
  728.  
  729.     17 MOD 7        (returns 3)
  730.     a % MOD b%
  731.  
  732. Parentheses
  733.  
  734. Parentheses are used to change the order in which the different parts of an
  735. expression are calculated. Without parentheses, expressions are evaluated
  736. in a certain order which depends on the operators they contain - some
  737. operators have precedence over others (see the Table of Precedence). For
  738. example, multiplication has precedence over addition; so, in the
  739. expression:
  740.  
  741.     3 + 4 * 2
  742.  
  743. the 'four times' part is worked out first and then added to 3, giving 11 as
  744. the result. You could alter this by enclosing '3 + 4' in parentheses:
  745.  
  746.     (3 + 4) * 2
  747.  
  748. to give a result of 14.
  749.  
  750. Parentheses must always be paired - each '('should have a matching')'.
  751.  
  752. Concatenation
  753.  
  754. When used with strings or string variables, the plus sign causes the string
  755. specified by the right operand to be appended to the string specified by
  756. the left operand, e.g.:
  757.  
  758.     "ABCD" + "defg"            evaluates as "ABCDefgh"
  759.  
  760. Used in this way, the plus sign acts as a string operator.
  761.  
  762.                 2-9
  763.  
  764. RELATIONAL OPERATORS
  765.  
  766. Relational operators compare the values of two numbers or two strings, and
  767. return a result which is either true or false. They are mainly used with IF
  768. THEN and WHILE WEND statements to make a decision about whether the program
  769. takes a particular action or not. For example:
  770.  
  771.     IF n% > 30 THEN GOSUB label
  772.  
  773. The relational operators are:
  774.  
  775.     >        greater than           12>55 is false, i.e.0
  776.     =        greater than or equal to    
  777.     <        less than
  778.     <=        less than or equal to       27<=27 is true, i.e.-1
  779.     <>        not equal to           1=5-4 is true, i.e.-1
  780.     =        equal to
  781.     LIKE        pattern matching operator for strings.
  782.     CONTAINS    pattern matching operator for text files.
  783.  
  784. As far as the user is concerned the result of comparison is either true or
  785. false. But when DML comes to evaluate a comparison, it actually assigns a
  786. numeric value to the result. If the result is true, DML assigns it the
  787. value of -1; if false, it assigns the value of 0. This means that if you
  788. enter the statement:
  789.  
  790.     ? 8>5
  791.  
  792. or
  793.  
  794.     ? "F"=LEFT$ ("FRIDAY", 1)
  795.  
  796. DML will display -1. If the result of a comparison is false, it will
  797. display 0. For string operands, comparison is character by character from
  798. the left where 'a' is less than 'b' is less than 'c' and uppercase
  799. characters are less than lower case characters ('A" is less than 'a'). Note
  800. that numeric data can only be compared with numeric data and string data
  801. can only be compared with string data. If you attempt to compare numeric
  802. data with string data then the message:
  803.  
  804.     Can't do this/Data types don't match
  805.  
  806. appears.
  807.  
  808.                 2-10
  809.  
  810. LIKE
  811.  
  812. LIKE is a case insensitive pattern matching relational operator which is
  813. used to compare string data. The question mark '?' and asterisk '*'
  814. characters can be used as wildcards. The question mark matches single
  815. characters and the asterisk '*' matches multiple characters.
  816.  
  817. For a full explanation of how to use LIKE, see Volume I, Appendix B.
  818.  
  819. CONTAINS
  820.  
  821. CONTAINS works in the same way as LIKE, but it used with ASCII files on
  822. disk; for example, you could use the expression:
  823.  
  824.     CONTAINS "*Smith*"
  825.  
  826. to search for an ASCII file which contained the name Smith. See Chapter 9, 
  827. Volume 1, for more details.
  828.  
  829. LOGICAL OR BOOLEAN OPERATORS.
  830.  
  831. Logical operators are most frequently used to modify the results of
  832. relational operators. An expression that contains a relational operator can
  833. either be true or false. With a logical operator you can create more
  834. complex expressions whose truth or falsity (their 'truth value') depends on
  835. the truth or falsity of one or more relational expressions.
  836.  
  837. AND
  838.  
  839. This operator allows you to test whether two comparisons are true at the
  840. same time. For example:
  841.  
  842.     12 > 5
  843.  
  844. and
  845.  
  846.     6 < 16
  847.  
  848. are both true, so
  849.  
  850.     12 > 5 AND 6 < 16
  851.  
  852. is also true.
  853.  
  854.                 2-11
  855.  
  856. NOT
  857.  
  858. NOT reverses the truth or falsity of an expression. Thus:
  859.  
  860.     12 < 5
  861.  
  862. is false, so
  863.  
  864.     NOT 12 < 5
  865.  
  866. is true.
  867.  
  868. NOT is often used with the EOF function to set up a program loop for
  869. processing all the records in a file, e.g.:
  870.  
  871.     WHILE NOT EOF ("address")
  872.     SELECT NEXT
  873.     VIEW
  874.     WEND
  875.  
  876. OR
  877.  
  878. OR gives a true result if one or the other, or both, of its operands is
  879. true. For example:
  880.  
  881.     12>5 OR 12<5
  882.     8=2*3 OR 6>5
  883.     8=2*4 OR 6<5
  884.  
  885. all give true results.
  886.  
  887.     12>5 OR A$="LONDON"
  888.  
  889. gives a true result whatever the value of A$.
  890.  
  891.     8=2*3 OR 12<5
  892.  
  893. gives a false result.
  894.  
  895. Logical operators can also be used with numeric expressions to give a
  896. result which depends on the binary digits of the operands. In this context,
  897. they are sometimes known as bitwise operators. Instead of comparing the
  898. truth or falsity of expressions, AND and OR - when used as bitwise
  899. operators - compare the binary digits of two numbers, while NOT takes a
  900. single number, and changes each binary 1 to 0, and vice versa. Thus AND
  901. returns binary 1, if and only if, the corresponding digits in the two
  902. operands are both 1, e.g.:
  903.  
  904.     85 AND 19
  905.  
  906. gives a value of 17.
  907.  
  908.                 2-12
  909.  
  910.     85 in binary is 01010101
  911.     19 in binary is 00010011
  912.  
  913. The result is 00010001 which is 17
  914.  
  915. TABLE OF PRECEDENCE
  916.  
  917. Complex expressions, containing more than one operator and several simple
  918. expressions, are evaluated according to the following table. The higher up
  919. the table an operator is, the higher the precedence it is given. This means
  920. that if there are two simple expressions, the one whose operator has the
  921. highest precedence will be evaluated first.
  922.  
  923.     ^        Exponentiation
  924.     */        Multiplication and Division
  925.     MOD        Modulo arithmetic
  926.     +-        Addition and Subtraction
  927.     <> <=> =    Relational operators
  928.     LIKE CONTAINS    Relational operators
  929.     NOT        Logical NOT
  930.     AND        Logical AND
  931.     OR        Logical OR
  932.  
  933. Where identical weighted operators are concerned evaluation will be from
  934. left to right e.g.:
  935.  
  936. 12 + 3-2    is evaluated as    12 + 3=15 : 15-2=13
  937. 12 + 3*4    is evaluated as    3 * 4=12 : 12 + 12=24
  938. 12 + 3*4-2    is evaluated as    3*4=12 : 12 + 12=12 : 24-2=22
  939.  
  940. Parentheses can be used to promote expressions up the table, e.g.:
  941.  
  942. (12+3) * (4-2)  evaluates as   15*2=30
  943.  
  944. CONSTANTS
  945.  
  946. The fixed values that you assign to variables or use as part of an
  947. expression are known as constants. There are two types: string constants
  948. and numeric constants. String constants must be enclosed in quotation
  949. marks. DML also provides a ready-defined constant PI, which has the value
  950. of 3.141593265359 and can be used in numeric calculations.
  951.  
  952.                 2-13
  953.  
  954. EXPRESSIONS
  955.  
  956. Expressions are formed from any combination of:
  957.  
  958. Fields
  959. Variables
  960. Constants
  961. Functions
  962. Operators
  963.  
  964. An expression can consist of a single variable name, a field name, or a
  965. constant,  or it may be more complex, combining these with operators,
  966. constants and functions. The following are examples of expressions:
  967.  
  968. 396
  969. TODAY
  970. a$
  971. "31 Ambleside Drive"
  972. textfielda
  973. numfielda
  974. Firstname.address
  975. LEFT$ (Firstname.address, 1)
  976. 3.44*22.8 + 450
  977. "Mr" + A$
  978. A$ + B$
  979. a%<>b%
  980. (a$=b$) AND (c%=1)
  981. INT (RND (1) *26) +1
  982. COS (n%)
  983.  
  984. LINE FORMAT AND LABELS
  985.  
  986. There are no line numbers in DML; instead, to provide a reference for GOTO
  987. and GOSUB commands (or ON GOTO and ON GOSUB commands) you can place a label
  988. at the front of a line. Labels can be any combination of alphanumeric
  989. characters but cannot contain spaces.
  990.  
  991. Labels must end in a colon (':') unless they consist only of numeric
  992. characters. You can use a number as a label without adding a colon, but
  993. this will not have the effect of altering the sequence of program lines.
  994. So, if you enter a line with the label '30' after a line with the label
  995. '50', both lines will remain in that order.
  996.  
  997. A DML line, whether in direct mode or program mode, can contain more than
  998. one statement, provided the statements are separated by colons.
  999.  
  1000.                 2-14
  1001.  
  1002. Labels, however, can only be used in program mode.
  1003.  
  1004. Any command which is placed at the beginning of a multi-statement line
  1005. should be followed by a space. If it is followed by a colon without an
  1006. intervening space, DML may interpret it as a label. For example, in the
  1007. line:
  1008.  
  1009.     CLS: STATUS
  1010.  
  1011. the command CLS has no effect, but
  1012.  
  1013.     CLS: STATUS
  1014.  
  1015. works as intended.
  1016.  
  1017. You also need to insert a space before an expression - a variable name or a
  1018. field name, for example - if it is preceded by a DML command word. But
  1019. otherwise in program mode, DML will accept lines without any spaces in them
  1020. (it inserts spaces when it parses a line).
  1021.  
  1022. In direct mode, it is generally necessary to insert spaces between the
  1023. various elements of a command line.
  1024.  
  1025. SYNTAX
  1026.  
  1027. The Keyword Reference section gives the exact syntax for each keyword.
  1028. However,  there are several rules that apply generally.
  1029.  
  1030. FILE NAMES AND FIELD NAMES
  1031.  
  1032. Wherever a command is followed by a file name - or takes a file name as one
  1033. of its arguments - the file name must be enclosed in quotation marks.
  1034. Fieldnames should not be in quotation marks.
  1035.  
  1036. For most operations, you should not include the extension name for a file
  1037. (the part of the name after the full stop). Superbase automatically looks
  1038. for files with the appropriate extension; so, with the command:
  1039.  
  1040.     OPEN FILE "Address"
  1041.  
  1042. it looks for the file "Address.sbf".
  1043.  
  1044. The one exception to this rule is when you are dealing with text files.
  1045. OPEN FOR INPUT/OUTPUT, OUTPUT TO, IMPORT and EXPORT all take data to or
  1046. from text files, and require that file names are given in full.
  1047.  
  1048. If you save a file from Superbase's text editor, it automatically adds an
  1049. '.sbf' extension to the file name - and when you open a file from the text
  1050. editor, you do not need to supply the '.sbt' extension. But when you make
  1051. use of a text
  1052.  
  1053.                 2-15
  1054.  
  1055. editor file in some other applications - with IMPORT, for example - you
  1056. must remember to include the .sbt extension. By the same token, you will
  1057. not be able to load text files into the text editor unless you give them a
  1058. .sbt extension.
  1059.  
  1060. UPPER CASE AND LOWER CASE
  1061.  
  1062. Certain string functions such as INSTR are case sensitive, but otherwise
  1063. DML ignores the difference between lower and upper case letters (small
  1064. letters and capital letters). In other words, it does not matter whether
  1065. you use lower or upper case letters when you type in a keyword or any of
  1066. the following:
  1067.  
  1068.     variables
  1069.     file names
  1070.     field names
  1071.  
  1072. It is a good idea, though, to enter program lines and direct command lines
  1073. in lower case. Once DML has accepted a line, it converts any reserved words
  1074. (that is, any keywords) to upper case. Typing in lower case allows you to
  1075. check that you have not used a reserved word by mistake.
  1076.  
  1077.                 2-16
  1078.  
  1079.             CHAPTER 3 - THE PROGRAM EDITOR
  1080.  
  1081. THE PROGRAM MENU
  1082.  
  1083. Operations relating to programs and programming are controlled from a
  1084. single menu at the right of the menu bar, the Program menu. This section
  1085. lists the Program menu options, and gives a brief explanation of their
  1086. functions. Apart from Print and Remove (which should not require further
  1087. explanation), each option is also described in more detail in the sections
  1088. that follow.
  1089.  
  1090. COMMAND    Opens the Command line window, allowing the user to enter program
  1091.     instructions as direct commands.
  1092.  
  1093. RUN    Runs the program in memory or, if there is no program in memory,
  1094.      loads a program from disk and runs it.
  1095.  
  1096. NEW    Opens the Program Editor window and clears any program that may be
  1097.     in memory.
  1098.  
  1099. EDIT    Opens the Program Editor window.
  1100.  
  1101. OPEN    Loads a program from disk into memory.
  1102.  
  1103. CLOSE    Clears the program in memory - the program that is currently in the
  1104.     Program Editor - and closes the Program Editor window.
  1105.  
  1106. SAVE    Saves the program in memory to disk.
  1107.  
  1108. PRINT    Prints the program in memory.
  1109.  
  1110. REMOVE    Deletes a program file from disk.
  1111.  
  1112. THE PROGRAM EDITOR WINDOW
  1113.  
  1114. When you select Edit or New from the Program menu, Superbase opens a window
  1115. at the right-hand half of the screen. This is the program window where you
  1116. enter and edit programs (see next page).
  1117.  
  1118. In most respects, the program window can be treated in the same way as the
  1119. text window: you use the same controls for closing, resizing and moving the
  1120. window (as explained in Chapter 10, Volume 1); and you also use many of the
  1121. same key
  1122.  
  1123.                 3-1
  1124.  
  1125. controls for editing a program. In fact, both the Program Editor and the
  1126. Text Editor make use of the same window. The window can only be occupied by
  1127. one of them at a time, but any changes you make to the size or location of
  1128. the window will apply when you switch to the other editor.
  1129.  
  1130. The main difference between the two is that the Program Editor does not
  1131. have its own set of menus. The Program menu is available at all times -
  1132. except when the Text Editor menus are active - whether the program window
  1133. is open or closed.
  1134.  
  1135. As with the Text Editor, you can switch between the program window and the
  1136. database window simply by moving the mouse pointer to the required window
  1137. and clicking in it. Thus, to edit a record after opening the program
  1138. window, you would click twice in one of the fields displayed in the
  1139. database window - once to make the database window active, and once to
  1140. activate the record editing cursor (on the Amiga, you would only need to
  1141. click once). If you then wanted to return to the Program Editor, clicking
  1142. once in the program window would make the program cursor active again.
  1143.  
  1144. Notice that the Close option on the Program menu not only closes the window
  1145. but also removes the current program from memory. If you wish to close the
  1146. window without clearing the program from memory, click on the close window
  1147. gadget at the top left-hand corner.
  1148.  
  1149.                 3-2
  1150.  
  1151. NOTE: Screen output from a Superbase program is displayed in the database
  1152. window. If there is a record in view, program data will be output below or
  1153. to the right of the bottom line of record data. To clear the database
  1154. window before displaying program data on screen, use the CLS command.
  1155.  
  1156. CREATING A NEW PROGRAM
  1157.  
  1158. Selecting Edit from the Program menu opens the program window and places
  1159. the program cursor at the top left-hand corner. When you enter the Program
  1160. Editor for the first time in a session, the window will be empty; you can
  1161. then start entering program lines straight away. If you have previously
  1162. loaded a program into memory and want to start afresh on a new program,
  1163. select New to clear the existing program from memory.
  1164.  
  1165. Entering program lines is simply a matter of typing them in at the
  1166. keyboard. When you have typed in a line, pressing the Return key will take
  1167. you to the start of the next line.
  1168.  
  1169. Superbase accepts program lines up to 255 characters long. As you type
  1170. characters beyond the right-hand edge of the window, the program will be
  1171. scrolled to the left. Using the scroll bars enables you to move the window
  1172. over any part of a line up to 255 characters.
  1173.  
  1174. LINE FORMAT
  1175.  
  1176. An explanation of the correct format for a Superbase program line is given
  1177. in Chapter 2, Line Format and Labels. However, it is worth repeating th
  1178. rule about inserting spaces in a line: you need to insert a space if you
  1179. enter an expression - such as a variable name, a field name, or a constant
  1180. - after a keyword, or if you enter two adjacent keywords. In the following
  1181. example, the space between the two items on the line must be entered by the
  1182. user:
  1183.  
  1184.     ? "Hello"
  1185.  
  1186. You should also type a space between a command and a colon if the command
  1187. is placed at the start of a multi-statement line. If you do not do this,
  1188. DML will interpret the command as a label.
  1189.  
  1190. Otherwise, you can ignore spaces as you type in a program. If a line
  1191. contains adjacent variables or operators and other elements of an
  1192. expression, DML inserts spaces between them when it 'parses' the line.
  1193.  
  1194. Parsing refers to the process which takes place when you press Return or
  1195. move the cursor away from the current line. DML scans the line and
  1196. identifies the various elements in it. As well as inserting spaces between
  1197. recognizable
  1198.  
  1199.                 3-3
  1200.  
  1201. elements, it also converts any keywords that are entered in lower case to
  1202. upper case. Thus if you typed:
  1203.  
  1204.     if a%=3.5+6then goto label1
  1205.  
  1206. DML would parse this line as:
  1207.  
  1208.     IF a%=3.5+6THEN GOTO label1
  1209.  
  1210. You are recommended to enter program lines in lower case as a way of
  1211. ensuring that you do not use reserved words as labels or variables. When a
  1212. line is parsed, you will be able to see at a glance whether these items are
  1213. correct,  because the reserved words will be shown in upper case.
  1214.  
  1215. It is unlikely that you will need to create programs with lines over 200
  1216. characters long. However, if you do, it is important to bear in mind that
  1217. spaces may be inserted in the line. Even though the line you type in is
  1218. less than 255 characters, it may exceed this limit when it has been parsed.
  1219.  
  1220. EDITING A PROGRAM
  1221.  
  1222. The Program Editor uses the same key controls for editing a program and
  1223. moving the cursor around the screen as the Text Editor. As you would
  1224. expect, it is not possible to specify margins or reformat a program; and the
  1225. style setting functions are not available. Otherwise, the only difference
  1226. is in the way the Return key works. In the Text Editor, Return either moves
  1227. the cursor to the start of the next line or creates a new line, depending
  1228. on whether overwrite or inset mode has been selected.
  1229.  
  1230. In this section, we only provide a list of the Program Editor key controls
  1231. together a brief description of their functions. For a detailed explanation
  1232. of these keys, see Chapter 10, Volume 1. The '^' character is used here to
  1233. represent the CTRL key (Control on the Atari ST); ^N for instance,
  1234. indicates that the CTRL key and the letter N should pressed in combination.
  1235.  
  1236. MOVING THE CURSOR
  1237.  
  1238. As with the Text Editor, you can move the cursor around the screen and edit
  1239. a program at any point on the screen.
  1240.  
  1241. The cursor keys are used to move the cursor by one character at a time.
  1242. Note that the term character includes the space character.
  1243.  
  1244.                 3-4
  1245.  
  1246. LEFT ARROW        Moves the cursor to next character to the left.
  1247.  
  1248. RIGHT ARROW        Moves the cursor to the next character to the
  1249.             right.
  1250.  
  1251. UP ARROW        Moves the cursor to the character in the same
  1252.             column on the line above.
  1253.  
  1254. DOWN ARROW        Moves the cursor to the character in the same
  1255.             column on the line below.
  1256.  
  1257. For larger cursor movements, use the following keys:
  1258.  
  1259. ^B            Takes the cursor to the first line in the text.
  1260. ^G            Takes the cursor to the last line in the text.
  1261. Home (GEM)        Moves the cursor to the beginning of a line.
  1262. Clr Home (GEM Atari)    Moves the cursor to the beginning of a line.
  1263. Shift right cursor (Amiga)  Moves the cursor to the beginning of a line.
  1264. End (GEM)        Moves the cursor to the end of line.
  1265. Insert (GEM Atari)    Moves the cursor to the end of line.
  1266. Shift left cursor (Amiga)  Moves the cursor to the end of a line.
  1267. Tab            Moves the cursor eight characters to the right.
  1268. Shift Tab        Moves the cursor eight characters to the left.
  1269. Control T        Moves the cursor eight characters to the left.
  1270.  
  1271. DELETING AND INSERTING
  1272.  
  1273. The following keys are used for deleting and inserting program lines or
  1274. parts of a program line:
  1275.  
  1276. BACKSPACE        Delete character to the left of the cursor.
  1277. DEL            Delete character to the right of the cursor.
  1278. ^W            Delete word.
  1279. ^E            Delete to end of line.
  1280. ^D            Delete line.
  1281. ^X            Clear line.
  1282. ^N            New line.
  1283. ^S            Split line.
  1284. ^A            Join line.
  1285. ^V            Insert mode on/off.
  1286. ^U            Undo.
  1287.  
  1288. Note that Undo works in the same way as in the Text Editor, and can be used
  1289. as a 'cut and paste' facility, allowing you to move multiple program lines
  1290. to a new position.
  1291.  
  1292.                 3-5
  1293.  
  1294. USING THE COMMAND LINE
  1295.  
  1296. Selecting the Command option on the Program menu presents you with the DML
  1297. Command Line dialog. Any commands you type in the command line box will be
  1298. executed as soon as you click on OK or press Return; that is, they will be
  1299. executed as direct commands.
  1300.  
  1301. The command line box accepts single or multi-statement lines (with
  1302. statements separated by colons) up to 255 characters. You can type in
  1303. commands when ever the cursor is present. If the cursor is not shown, click
  1304. in the box to activate it.
  1305.  
  1306. There is very little restriction on which keywords can be entered as direct
  1307. commands. READ (and DATA), GOSUB, and ON GOSUB cannot operate as direct
  1308. commands,  and you cannot use labels in the command line. Apart from these,
  1309. almost any single or multi-statement line that can be entered in a program
  1310. can also be entered in the command line.
  1311.  
  1312. Clearly, any statement that refers to another statement in the command line
  1313. will not operate, because of the absence of labels. However, it is possible
  1314. to enter GOTO statements which refer to labels in the current program. You
  1315. may want to do this when you are testing a program. The normal way of
  1316. executing a program - using the RUN command or Run option - clears the
  1317. program's variables. GOTO allows you to execute a program or part of a
  1318. program without destroying any variable assignments that may have already
  1319. been made.
  1320.  
  1321. You will use the command line for variety of purposes. There are some
  1322. operations - such as appending a text or program file to a file in memory -
  1323. which can only be performed using commands. You may also want to enter
  1324. commands as an alternative to selecting options from the Superbase
  1325. menus; but it is generally more practical to do this by assigning the
  1326. commands to a function key.
  1327.  
  1328. In addition, the command line is valuable tool for developing and testing
  1329. programs. Particularly useful are commands such as:
  1330.  
  1331.     ? MEMORY
  1332.  
  1333. and
  1334.  
  1335.     ? LIST
  1336.  
  1337. The first command lists the current program's variables and their
  1338. values; the second can be used to display the program listing in the
  1339. database window.
  1340.  
  1341.                 3-6
  1342.  
  1343. EDITING THE COMMAND LINE
  1344.  
  1345. The cursor keys move the cursor in the command line one character at a
  1346. time. Home (Clr Home on the Atari ST) and End (Insert on the Atari ST) take
  1347. the cursor to beginning and end of the command line. Del deletes the
  1348. character in front of the cursor, Backspace deletes the character before.
  1349.  
  1350. If you make a mistake while typing in the command line, you can use these
  1351. keys to correct it. Command lines remain in the box after they have been
  1352. executed and function key commands are placed in the command line box after
  1353. execution, so you may also want to recall the previous command for editing.
  1354.  
  1355. LOADING A PROGRAM
  1356.  
  1357. To load a program from disk into the Program Editor, select Open from the
  1358. Program menu. A file dialog will appear, listing the names of the program
  1359. files in the current directory. You can then select a file in the usual
  1360. way. If you want to load a program in another directory or on another disk,
  1361. type in the file name preceded by the path name.
  1362.  
  1363. To append a program on disk to program in memory, select the Command option.
  1364. Then enter:
  1365.  
  1366.     LOAD "programname", APPEND
  1367.  
  1368. where "programname" is the name of the program on disk which is to be
  1369. joined to the current program.
  1370.  
  1371. Most of the programs you run will have been created in the Program Editor.
  1372. However, it also possible to load a program which has been written in a
  1373. word processor, or has been created in another program editor. In this
  1374. case, there are two requirements: the program file must have an '.sbp'
  1375. extension, and it must be an ASCII file.
  1376.  
  1377. Note that Open loads a program into the Program Editor, but it does not
  1378. open the Program Editor window. If the window is closed and you wish to
  1379. edit a program after loading it, select Edit.
  1380.  
  1381. SAVING A PROGRAM
  1382.  
  1383. Save on the Program menu saves the current program on disk. When you select
  1384. this option. Superbase displays a dialog where you type in the name under
  1385. which the program is to be saved.
  1386.  
  1387.                 3-7
  1388.  
  1389. Normally, programs are saved on disk in 'tokenized' form; instead of storing
  1390. each character in a keyword, Superbase represents keywords using single
  1391. character tokens (keywords are represented in this way internally as well
  1392. as on disk). To save a program as an ASCII file, enter in the command line:
  1393.  
  1394.     SAVE "program name", TEXT
  1395.  
  1396. ASCII program files can be loaded back into the Program Editor and run
  1397. straight away. Note that all program files, both tokenized and ASCII files,
  1398. are given an '.sbp' extension.
  1399.  
  1400. RUNNING A PROGRAM
  1401.  
  1402. Select Run from the Program menu to run the program in memory. If there
  1403. isn't a program in the Program Editor, Run displays the program file
  1404. dialog. When a program has been selected, it is loaded into memory and then
  1405. executed.
  1406.  
  1407. The DML command RUN provides the program equivalent of the menu option. It
  1408. is generally entered as a direct command, but it can also be used within a
  1409. program. As a program command (rather than a direct command), RUN allows
  1410. you to perform a task by linking together a series of programs. When one
  1411. stage has been completed, RUN followed by a program file name will load and
  1412. execute the program which performs the next stage.
  1413.  
  1414. However, the drawback to using RUN for this purpose is that loading and
  1415. executing a new program clears the previous program's variables. If you
  1416. want to link a number of programs together, it usually preferable to use
  1417. the CHAIN command. This provides the same facility as RUN but has the
  1418. advantage that it does not clear any existing variable assignments.
  1419.  
  1420. CREATING A START UP PROGRAM
  1421.  
  1422. One of Superbase's most useful features is the way it lets you specify a
  1423. 'start up' program, which will be automatically loaded and executed when
  1424. you run Superbase. There are many ways in which you can take advantage of
  1425. this feature,  especially if you use Superbase on a regular basis for a
  1426. specific application. All the tasks that you need to perform at the start
  1427. of a session - such as opening files and loading a function key set - can
  1428. be taken care of by the start up program.
  1429.  
  1430.                 3-8
  1431.  
  1432. The procedure for creating a start up program is straightforward. There are
  1433. two requirements:
  1434.  
  1435. The program must be stored in a directory where Superbase will find it:
  1436. either the Start directory as specified in Options on the Set menu (see
  1437. Chapter 7,  Volume 1) or the directory which is current when Superbase is
  1438. loaded; usually this will be the same directory as the Superbase program
  1439. file.
  1440.  
  1441. The program must be saved under the file name Start (this appears on disk
  1442. as Start.sbp).
  1443.  
  1444. When you run Superbase, it looks in the current directory for a program
  1445. with the name Start. If you have specified a Start directory in the '.par'
  1446. file, it then looks for the program in that directory.
  1447.  
  1448. EXAMPLES
  1449.  
  1450. LOAD KEY "Funkey1"
  1451. OPEN FILE "Address"
  1452. OPEN FILE "Customers"
  1453. SET TABLE
  1454. VIEW
  1455.  
  1456. This program loads a function file, opens two database files, set Table
  1457. View, and then displays the first record in the Customers file.
  1458.  
  1459. LOAD KEY "Funkey1"
  1460. NUMBASE "z999999."
  1461. RUN "Prog2"
  1462.  
  1463. After loading a function key file, this program sets the numeric format and
  1464. then loads and executes prog2.
  1465.  
  1466.                 3-9
  1467.  
  1468.             CHAPTER 4 - FUNCTION KEYS
  1469.  
  1470. With Superbase's function key facility, you can create a new set of key
  1471. controls. Each function key may be assigned a string of up to 255
  1472. characters. Depending on the context, Superbase will interpret the string
  1473. either as a command (or sequence of commands) or as text.
  1474.  
  1475. The main applications for this facility are:
  1476.  
  1477. Creating command sequences - one line programs - to provide keyboard
  1478. equivalents for the Control Panel buttons and menu options.
  1479.  
  1480. Creating more complex command sequences which will perform multiple
  1481. operations with a single key-stroke.
  1482.  
  1483. Inserting often-used words, keywords, phrases, and paragraphs in a text
  1484. document or a program.
  1485.  
  1486. The number of functions keys you can define depends on which version of
  1487. Superbase is used. All versions provide the function keys F1 to F10. In
  1488. addition, Amiga and Atari owners can use the Help key, which may be
  1489. regarded as key F0. Another set of ten function keys is available when you
  1490. use F1 to F10 in combination with the Shift key. On Gem versions of
  1491. Superbase running under MS DOS, you can also use the CTRL and Alt keys in
  1492. combination with the keys F1 to F10.
  1493.  
  1494. To summarize these differences:
  1495.  
  1496. 21 function keys are available to Amiga and Atari owners; F1 to F10 plus
  1497. Help, and Shift F1 to Shift F10.
  1498.  
  1499. MS DOS computers have 40 function keys; F1 to F10, and the same keys in
  1500. combination with Shift, CTRL or Alt.
  1501.  
  1502. SETTING A FUNCTION KEY
  1503.  
  1504. There are two ways of setting a function key: using the Set Menu option
  1505. Function keys (Function keys Edit on the Amiga), and using the DML command
  1506. KEY. With the first method, you select Function keys from the Set menu. You
  1507. will then be presented with the Function key dialog (see next page).
  1508.  
  1509. This shows the dialog for GEM versions of Superbase running under MS DOS.
  1510. Atari versions have three keys at the right: Help, Down arrow and Up arrow.
  1511. In both 
  1512.  
  1513.                 4-1
  1514.  
  1515. MS DOS and Atari versions, the Up arrow symbol is used to represent the
  1516. Shift key. The Down arrow represents Shift off; clicking on this key
  1517. highlights it and turn Shift off.
  1518.  
  1519. On the Amiga, the four keys at the right of the panel are replaced by the
  1520. HELP and Shift keys.
  1521.  
  1522. On entry to the dialog, the F1 key is highlighted (as is the down arrow key
  1523. on GEM versions). Clicking on one of the other keys, F2 to F10 (and HELP on
  1524. the Amiga and Atari), highlights the key, making it available for setting.
  1525. You can then assign a string to the key by typing it in the entry box
  1526. below. Click in the box first if the cursor is not shown.
  1527.  
  1528. Clicking on Shift (or the Up arrow symbol) highlights it; you can now assign
  1529. a string to one of the key combinations Shift F1 to Shift 10. For the Amiga
  1530. and the Atari, the Shift key is the only one that can be used in
  1531. combination with the keys F1 to F10 - Shift HELP is the same HELP on its
  1532. own. On MS DOS  machines, you also have the choice of selecting CTRL and
  1533. ALT. This makes available the key ranges CTRL F1 to CTRL F10 and ALT F1 to
  1534. F10.
  1535.  
  1536. When you have set the functions keys you require, click on OK. This action
  1537. will assign the strings you have entered to their respective keys and then
  1538. remove the dialog.
  1539.  
  1540. The other method of setting the function keys is to use the DML command KEY
  1541. - either from the Command Line or from a program. Consult the keyword
  1542. reference entry under KEY for an explanation of how to use this command.
  1543.  
  1544. FUNCTION KEYS FOR COMMANDS
  1545.  
  1546. As we mentioned earlier, Superbase treats function key assignments as
  1547. commands or text according to the circumstances. If one of the editing
  1548. cursors is active, a function key string is interpreted as text; if a cursor
  1549. is not present, 
  1550.  
  1551.                 4-2
  1552.  
  1553. a string is executed as a command. There are three circumstances in which
  1554. an editing cursor may be active: when you are editing a document in the
  1555. Text Editor, or a program in the Program Editor, and when you are editing a
  1556. field in record edit mode.
  1557.  
  1558. The rules governing the commands which can assigned to function keys are
  1559. the same as for the Command Line (see Chapter 3). If the commands can be
  1560. executed as a one line program, they can also be assigned to a function
  1561. key. Note that single word commands at the beginning of a function key
  1562. string must have a trailing space if followed by a colon.
  1563.  
  1564. EXAMPLES
  1565.  
  1566. The following function key strings show how you can create keyboard
  1567. equivalents for the Control panel buttons:
  1568.  
  1569. SELECT FIRST: VIEW
  1570.  
  1571. This has the same effect as clicking on the First record button.
  1572.  
  1573. SELECT LAST: VIEW
  1574.  
  1575. Equivalent to the Last Record button.
  1576.  
  1577. a%=0: a$=" ": REQUEST "Locate key", "", 4, a%, a$, 20:
  1578. IF a$ <> " " THEN SELECT KEY a$: VIEW
  1579.  
  1580. Equivalent to the Key Lookup button. The REQUEST command is not necessary
  1581. for this purpose, but it allows you to display a customized dialog, making
  1582. the operation of using an index key easier to perform.
  1583.  
  1584. It is worth pointing out that the command KEY lists all the current
  1585. function key assignments to the current output device. You may find it
  1586. useful to assign this command to one of the function keys. Enter the single
  1587. KEY as the function key string. Pressing the key will then show you at
  1588. glance what the settings are for the other keys.
  1589.  
  1590. FUNCTIONS KEYS FOR TEXT AND PROGRAM ENTRY
  1591.  
  1592. In text entry, Function keys are useful for entering text strings which
  1593. occur many times in the same document or are regularly used in different
  1594. documents. They save you the trouble of having to type in the string
  1595. yourself every time it is needed. Provided the text cursor is shown on
  1596. screen, pressing a function key will insert a string at the point where the
  1597. cursor is located.
  1598.  
  1599. The same applies to the use of function keys in program entry. You can
  1600. define function keys to insert commonly used keywords in a program. For
  1601. example, you
  1602.  
  1603.                 4-3
  1604.  
  1605. might want to define the keys F1 to F5 as:
  1606.  
  1607. REM
  1608. LOAD "
  1609. SAVE "
  1610. OPEN FILE "
  1611. WHILE
  1612.  
  1613. Keys F5 to F10 could then be assigned commands which are useful during
  1614. program development (you would have to activate the database window before
  1615. these could be executed):
  1616.  
  1617. MEMORY
  1618. RUN
  1619. PAGING ON: ? LIST
  1620. EDIT
  1621. STATUS
  1622.  
  1623. If you wish to assign a text string that runs over several lines, you need
  1624. to use the carriage return character. However, it is not possible to enter
  1625. this character in the Function keys dialog, so you must enter it using the
  1626. KEY command in a program or in the Command Line. Thus to assign an address
  1627. to F1,  you enter a string like this:
  1628.  
  1629. KEY 1, "6 Park Terrace " + CHR$ (13) + "Worcester Park" +
  1630. CHR$ (13) + "Surrey KT4 7 JZ" + CHR$ (13)
  1631.  
  1632. NOTE: In most cases, function key strings which are intended for text entry
  1633. cannot be executed as commands. Pressing a function key of this type when
  1634. the cursor is not active may cause an error message.
  1635.  
  1636. EDITING A FUNCTION KEY STRING
  1637.  
  1638. If a function key has already been set, selecting the Function keys option
  1639. (Function keys Edit on the Amiga) from the Set menu displays the contents
  1640. of the key in the string entry box. Initially, the setting for the F1 key
  1641. will be shown. In Gem versions, when you select another key, Superbase
  1642. displays the setting for that key.
  1643.  
  1644. If you wish to change the current setting, you can do so using the same
  1645. editing controls as for the Command Line: cursor keys, Backspace, Del, Home
  1646. and End. Alternatively, click on Clear to remove the current setting and
  1647. type in a new function key string.
  1648.  
  1649. Remember to press the Return key after editing a function key; otherwise
  1650. your alterations will not be registered.
  1651.  
  1652.                 4-4
  1653.  
  1654. FUNCTION KEY FILES
  1655.  
  1656. The strings you assign to the functions keys can be saved on disk for use
  1657. in other sessions with Superbase. Function key files are saved as ASCII
  1658. files with the extension '.sbk'. If you wish to examine a function key
  1659. file, you may display it on screen or print it out with the List option on
  1660. the System menu. Notice that any keys which have not been assigned a string
  1661. are shown as blank lines.
  1662.  
  1663. SAVING FUNCTION KEY FILES
  1664.  
  1665. Selecting the Function keys Save option saves the current function key
  1666. settings on disk. Superbase adds the '.sbk' extension to the file name you
  1667. type in. Function keys Save presents you with a file dialog, showing the
  1668. existing '.sbk' files in the current directory. This operates in the same
  1669. way as any other file dialog. If you select a file name from the list -
  1670. instead of typing in a new name - a dialog will appear, asking if you wish
  1671. to overwrite the selected file. You can then click on OK to overwrite, or
  1672. Cancel to halt the operation.
  1673.  
  1674. LOADING FUNCTION KEY FILES
  1675.  
  1676. Select Function keys Load from the Set menu to load a function key file
  1677. from disk. A file dialog will appear showing the '.sbk' files in the
  1678. current directory. After a file has been selected, it is loaded into memory
  1679. and sets the current function keys.
  1680.  
  1681. The LOAD KEY "file name" command is used to load a function key file under
  1682. program control or from the Command Line. Once you have created the
  1683. function key set that meets your requirements, you can include this
  1684. command, followed by the name of the function key file, in the Start
  1685. program (see Creating a Start up program, Chapter 3). This way, the
  1686. function keys will be set up for you as soon as Superbase has loaded.
  1687.  
  1688. Another way of using the LOAD KEY command is to assign it to a function
  1689. key. You will then be able to load a specified function key file with a
  1690. single key press.
  1691.  
  1692.                 4-5
  1693.  
  1694.             CHAPTER 5 - KEYWORD REFERENCE GUIDE
  1695.  
  1696. SYNTAX CONVENTIONS
  1697.  
  1698. This section describes the conventions that have been used in the following
  1699. documentation.
  1700.  
  1701. The general format used to explain each keyword is as follows:
  1702.  
  1703. PURPOSE -a brief description of the keyword.
  1704. SYNTAX - the format of the keyword.
  1705. COMMENTS - explains the format and function of the keyword in more detail.
  1706. EXAMPLES - program examples.
  1707. NOTES - explains the program examples and covers any other points not dealt
  1708. with under the above headings.
  1709.  
  1710. For the syntax of the keyword, the following terms and symbols are used:
  1711.  
  1712. nexpr
  1713.  
  1714. This can be any valid numeric expression consisting of numeric fields, date
  1715. fields, numeric constants and/or numeric results of other keywords. For
  1716. example, if a function expects a numeric argument, you could enter any of
  1717. the following expressions:
  1718.  
  1719.     156        (an integer)
  1720.     156.25        (a floating point number)
  1721.     num%        (a numeric variable)
  1722.     numfield    (the name of a numeric field in a file)
  1723.     3 + 6        (the result of an expression)
  1724.     SQR (25)    (the result of a keyword)
  1725.  
  1726. strexpr
  1727.  
  1728. This can be any string or substring from a text field, external field,
  1729. string variable, text literal or string result of other keywords. For
  1730. example, any of the following expressions would be suitable entries for
  1731. strexpr:
  1732.  
  1733.     "hello"        (a string constant)
  1734.     strfield    (the name of a string field)
  1735.     numfield    (the name of a numeric field)
  1736.     fielda$        (a string variable)
  1737.  
  1738.                 5-1
  1739.  
  1740.     fielda$        (a string variable)
  1741.     Address        (a file name)
  1742.     MID$ ("immediately", 3, 2)  (a calculated result)
  1743.  
  1744. var
  1745.  
  1746. This can be any variable, string or numeric. If the keyword requires
  1747. variables of a particular type, strvar or nvar are used for string or
  1748. numeric variables. Various other conventions - such as fieldname or just
  1749. field - are used to indicate particular data types. These should be
  1750. self-explanatory.sbfile, for example, means that you should enter the name
  1751. of a database file; on disk,  Superbase identifies database files by an .sbf
  1752. extension, but you should not include the extension name when you use it in
  1753. a DML command.
  1754.  
  1755. Any parameters or arguments contained in parentheses are compulsory
  1756. (including any commas), while those within square brackets- '['and']' - are
  1757. optional. All other arguments are compulsory. For instance, supposing the
  1758. syntax for a keyword is given as:
  1759.  
  1760.     XXX (strexpr$, nexpr[.nexpr2])
  1761.  
  1762. This means that strexpr and nexpr are required with the keyword XXX and
  1763. that they must be separated by a comma. The next argument, nexpr2, is
  1764. optional, but if used must be separated from the second argument by a
  1765. comma.
  1766.  
  1767. The '/' character is used to indicate a number of alternatives. For
  1768. example:
  1769.  
  1770.     CLOSE ALL/FILE sbfile
  1771.  
  1772. The syntax for this statement indicates that CLOSE can be followed by
  1773. either ALL or FILE, but not both at the same time.
  1774.  
  1775.                 5-2
  1776.  
  1777. ? COMMANDS
  1778.  
  1779. ? is a general purpose output command. You can use it to display
  1780. information on screen, or to send information to the printer, or to create
  1781. a file on disk. When ? is followed by a list of expressions - text,
  1782. numbers, variables, fields, etc it sends the expressions to the current
  1783. output device. It can also be used with the following keywords:
  1784.  
  1785.     DIRECTORY
  1786.     LIST
  1787.     MEMORY
  1788.     QUERY
  1789.     STATUS
  1790.     TEXT
  1791.  
  1792. These keywords have a specific function when used with ?, and have been
  1793. treated as separate commands. You will find an entry for each of them
  1794. further on in this section.
  1795.  
  1796. CHANGING THE OUTPUT DEVICE
  1797.  
  1798. When you load Superbase, the ? command takes the screen as the default
  1799. device and works in the same way as the PRINT command does in other
  1800. versions of Basic - it displays information on screen. If you want to
  1801. direct output to another device use one of these commands first:
  1802.  
  1803.     PARAMETER        PURPOSE
  1804.     PRINT            for the printer
  1805.     OUTPUT TO        for the disk drive
  1806.     DISPLAY            to switch back to the screen
  1807.  
  1808. ? then continues to output to the device selected by one of these commands.
  1809. CLS and HOME do not reset the current output device.
  1810.  
  1811. PRINT and DISPLAY can be followed by a list of expressions which will then
  1812. be output to the devices associated with these commands. When you use PRINT
  1813. and DISPLAY simply to change the current output device, they should be
  1814. followed by a semicolon, as in:
  1815.  
  1816.     PRINT;
  1817.  
  1818. which directs all future output to the printer.
  1819.  
  1820. OUTPUT TO needs a filename after it, as in:
  1821.  
  1822.     OUTPUT TO "texta"
  1823.  
  1824. which directs output to a file on disk named 'texta'.
  1825.  
  1826.                 5-3
  1827.  
  1828. OUTPUT FORMAT PARAMETERS
  1829.  
  1830. After outputting a list of expressions, the ? command starts a new line
  1831. unless you specify otherwise. This means that it takes the cursor to the
  1832. beginning of the next line (if the current output device is the screen).
  1833. You can instruct DML to output the next list of expressions on the same
  1834. line, by placing a semicolon at the end of an expression list. When it is
  1835. used in this way, the semicolon is known as an output format parameter, and
  1836. is one of a number of parameters that allow you to specify how output is
  1837. formatted.
  1838.  
  1839. Apart from the semicolon, you place these parameters in front of the
  1840. expressions that you want to format. Thus you can place them at the front
  1841. of the line immediately after the ? character, and you can also insert them
  1842. in the middle of an expression list.
  1843.  
  1844. Some output parameters are keywords such as BF and DOWN, and others are
  1845. symbols such as the semicolon itself and the @ sign. If you use keyword
  1846. parameters, they must separated from each other by spaces. For example, DML
  1847. will accept a line like this:
  1848.  
  1849.     ? UL BF IT "One", , "TWO' UL OFF @5, 10"Three"
  1850.  
  1851. but it will not accept
  1852.  
  1853.     ? ULBFIT"One", , "Two"ULOFF@5, 10"Three"
  1854.  
  1855. The output format parameters for the ? command are:
  1856.  
  1857. PARAMETER        PURPOSE
  1858.  
  1859. &            Sets length of text string
  1860. @            Sets row and column position
  1861. ,             Outputs a space
  1862. ;            Used as a separator and to suppress new line
  1863. DOWN            Outputs each item on a new line
  1864. ALL            Outputs all the fields in the current record
  1865. NEWLINE            Starts a new line
  1866. BF[ON]            Sets text to bold face
  1867. UL[ON]            Underlines text
  1868. IT[ON]            Sets text to italic
  1869. BF/UL/IT OFF        Turns selected text attribute off
  1870. ATTR OFF        Turns all text attributes off
  1871. FG (Amiga only)        Sets foreground color
  1872. BF (Amiga only)        Sets background color
  1873. SAY (Amiga only)        Speaks output
  1874. EJECTnn            Outputs data on a new page if there are less than
  1875.             nn lines left at the bottom of the page
  1876.  
  1877.                 5-4
  1878.  
  1879. COMMENTS
  1880.  
  1881. The @ sign, followed by a numeric expression, specifies the column and row
  1882. position for your output. For example, if the screen is the output device
  1883. selected:
  1884.  
  1885.     ? @12, 7"Smith"
  1886.  
  1887. displays the name Smith on the screen at column 12, row 7. As an
  1888. alternative to using @, see LOCATE.
  1889.  
  1890. DML treats a comma as a space character. For example:
  1891.  
  1892.     ? "Hello", , , "goodbye"
  1893.  
  1894. outputs
  1895.  
  1896.     Hello   goodbye
  1897.  
  1898. Placing a semicolon after the last expression in the output list prevents
  1899. DML from outputting a new line character. For example:
  1900.  
  1901.     ? "Hello": ? "there"
  1902.  
  1903. outputs them on the same line as
  1904.  
  1905.     Hello there
  1906.  
  1907. Note that when the output device is the screen, DML only outputs the
  1908. expressions in a list when it starts a new line. For example, if you enter
  1909. the line:
  1910.  
  1911.     ? "one"; "two"; "three";
  1912.  
  1913. nothing will appear on the screen until you enter another line which does
  1914. not have a semicolon at the end of it.
  1915.  
  1916. If used, DOWN must be placed at the front of a line, before the line's
  1917. expressions and after the ? character. It ensures that each expression in
  1918. the list is output on a new line. For example:
  1919.  
  1920.     ? DOWN "one"; "two"; "three"
  1921.  
  1922. nothing will appear on the screen until you enter another line which does
  1923. not have a semicolon at the end of it.
  1924.  
  1925. If used, DOWN must be placed at the front of a line, before the line's
  1926. expressions and after the ? character. It ensures that each expression in
  1927. the list is output on a new line. For example:
  1928.  
  1929.     ? DOWN "one"; "two"; "three"
  1930.  
  1931. formats the output on screen as
  1932.  
  1933.     one
  1934.     two
  1935.     three
  1936.  
  1937.                 5-5
  1938.  
  1939. When Down is used to format field data, it displays the field names in inverse
  1940. video at the left of the data - in same way as Record View displays a record.
  1941. ALL outputs the fields in the current record; for example, if the screen is the
  1942. current output device:
  1943.  
  1944.     ? DOWN ALL
  1945.  
  1946. would have the same effect as clicking on the current record button when
  1947. Record View is selected.
  1948.  
  1949. NEWLINE instructs DML to start a new line. Thus
  1950.  
  1951.     ? "one", "two"NEWLINE "three"
  1952.  
  1953. outputs the expressions as
  1954.  
  1955.     one two
  1956.     three
  1957.  
  1958. NEWLINE can also be used on its own - see NEWLINE, Keyword Reference.
  1959.  
  1960. BF, UL, and IT set the text style for output.
  1961. BF    sets boldface
  1962. UL    sets underline
  1963. IT     sets italic
  1964.  
  1965. Each of these can be set by ON (which is optional) and cleared by OFF.
  1966.  
  1967. ATTR OFF clears all the text style attributes.
  1968.  
  1969. For example:
  1970.  
  1971.     ? BF"Bold face on"; IT "italics on"; BF OFF IT OFF "Bold and italics
  1972. off" On the Amiga you can also set the foreground and background colours,
  1973. using FG and BG. Each takes a parameter in the range 1 to 4 for the four
  1974. colours set by Preferences. For example:
  1975.  
  1976.     ? FG 2 BF 1 "Foreground colour 2, background colour 1"
  1977.  
  1978. SAY, which is only available on the Amiga, uses the Amiga's narrator device
  1979. to speak the items in an expression list. Thus if you wanted to speak the
  1980. field names and field data for the current record, you would enter:
  1981.  
  1982.     ? SAY DOWN ALL
  1983.  
  1984. EJECT can be used to ensure that a group of data items - the fields in a
  1985. record, for example - all appear on the same page. For example:
  1986.  
  1987.                 5-6
  1988.  
  1989.     ? DOWN "One"; "Two"; "Three"; "Four" EJECT 4
  1990.  
  1991. displays a new page if there is not enough room at the bottom for the four
  1992. items in the expression list.
  1993.  
  1994.                 5-7
  1995.  
  1996. ?
  1997.  
  1998. PURPOSE
  1999.  
  2000. Sends information to a device.
  2001.  
  2002. SYNTAX
  2003.  
  2004. ? [@nexpr] [; expr; expr, ....]
  2005.  
  2006. COMMENTS
  2007.  
  2008. Used to send one or more expressions (an expression list) to the current
  2009. output device. ? can also include any of the output format parameters.
  2010.  
  2011. When you output numeric, date, and time constants or the results of
  2012. functions for these data types, they take the format which has been set
  2013. with the Number or Date/Time format options on the Set menu (or with the
  2014. commands NUMBASE and DATEBASE). Field data is output in the format set in
  2015. the file definition. However, you can force Superbase to output field data
  2016. in the current format by enclosing the field name in brackets. Thus:
  2017.  
  2018.     ? (numfielda), (datefielda)
  2019.  
  2020. displays the contents of these fields in the current numeric and date
  2021. formats rather than in the formats they have been given in the file
  2022. definition.
  2023.  
  2024. EXAMPLES
  2025.  
  2026. 1    ? "Hello"
  2027. 2    ? "Hello"; a$
  2028. 3    ? UL BF "Hello"; a$; NEWLINE b$
  2029. 4    ? "The square root of"; n%; "is"; SQR (n%
  2030. 5    ? "One""two""three"
  2031.  
  2032. NOTES
  2033.  
  2034. Depending on the numeric format that has been set, example 4 would output
  2035. the numeric expressions, n% and SQR (n%), with leading spaces. To remove
  2036. these, you would have to use the STR$ and LTRIM$ functions.
  2037.  
  2038. You will notice that there are no semicolons separating the expressions in
  2039.  
  2040.                 5-8
  2041.  
  2042. example 5. It is not always to place a semicolon between two expressions.
  2043. Provided DML has some other way of telling where one expression ends and
  2044. the other one starts, you can omit the semicolon. In this example the
  2045. quotation marks allow DML to distinguish between the three expressions.
  2046.  
  2047. ? DIRECTORY
  2048.  
  2049. PURPOSE
  2050.  
  2051. Lists the current directory to an output device.
  2052.  
  2053. SYNTAX
  2054.  
  2055. [?] DIRECTORY
  2056.  
  2057. COMMENTS
  2058.  
  2059. When the screen has been selected as the current output device, the
  2060. directory is listed in two columns in alphabetic order. If the output
  2061. device is the printer or a disk file, the directory is listed in single
  2062. column.
  2063.  
  2064. The "?" command is optional - DIRECTORY on its own has the same effect.
  2065.  
  2066. ? LIST
  2067.  
  2068. PURPOSE
  2069. List a program in memory to an output device.
  2070.  
  2071. SYNTAX
  2072. ? LIST
  2073.  
  2074. COMMENTS
  2075.  
  2076. Do not confuse this command with LIST, which displays a text file on
  2077. screen. ? LIST has several applications. You can use it to examine a
  2078. program listing by displaying it on screen on printing it out; and, when the
  2079. current output device is the disk drive, it allows you to save a program as
  2080. a text file. In this last application, it has the same effect as:
  2081.  
  2082.     SAVE "program name", TEXT
  2083.  
  2084.                 5-9
  2085.  
  2086. ? MEMORY
  2087. PURPOSE
  2088.  
  2089. Sends information about any defined variables to an output device.
  2090.  
  2091. SYNTAX
  2092.  
  2093. [?] MEMORY
  2094.  
  2095. COMMENTS
  2096.  
  2097. This outputs the variables in memory as:
  2098.  
  2099.     a%=123.46
  2100.     b%=12.00
  2101.     a1$="aaaaaaaaaaaaaa bbbbbbbb"
  2102.     etc.
  2103.  
  2104. The variables are output in the order in which they were assigned. If you
  2105. specify OUTPUT TO file, the values of the variables can be recovered for a
  2106. subsequent program by the SET file command.
  2107.  
  2108. The "?" command is optional - MEMORY on its own has the same effect.
  2109.  
  2110. ? QUERY
  2111. PURPOSE
  2112.  
  2113. Runs the current Query in memory and sends the results to an output device.
  2114.  
  2115. SYNTAX
  2116. ? QUERY
  2117.  
  2118. COMMENTS
  2119.  
  2120. Query has four output options (on the Amiga, SAY provides a fifth option).
  2121. You can send the output from a Query to the screen, the printer, to disk
  2122. (as an ASCII file) or to file (as an '.sbf' file). However, when you save a
  2123. Query, the currently selected output option is not saved with the rest of
  2124. the Query settings; so if you run a Query under program control, you will
  2125. need to select the output device beforehand.
  2126.  
  2127. To send output to the printer, either set the Printer option from the Set
  2128. menu,  or issue a PRINT; command. To send output to disk, you should use the
  2129. OUTPUT TO filename or OPEN filename FOR OUTPUT commands.
  2130.  
  2131.                 5-10
  2132.  
  2133. The Query output will then be stored on disk under file name specified.
  2134.  
  2135. EXAMPLES
  2136.  
  2137. 1    LOAD QUERY "Stockrep"
  2138.     PRINT;
  2139.     ? QUERY
  2140. 2    LOAD QUERY "Addreport"
  2141.     OPEN "Addrep.asc" FOR OUTPUT
  2142.     ? QUERY
  2143.  
  2144. NOTES
  2145.  
  2146. In the first example, output from the Stockrep Query is directed to the
  2147. printer; in the second example, output from the Addreport query is used to
  2148. create an ASCII file on disk under the name Addrep.asc.
  2149.  
  2150. ? STATUS
  2151. PURPOSE
  2152. Sends information about the System Status
  2153.  
  2154. SYNTAX
  2155. [?]STATUS[FILE sbfname]
  2156.  
  2157. COMMENTS
  2158.  
  2159. ? STATUS without the FILE option gives the same output as the menu option
  2160. System Status. If no Superbase files ('.sbf' files) are open, it displays
  2161. the following information:
  2162.  
  2163.     Memory free
  2164.     Diskspace Free
  2165.     Current Directory Name
  2166.     Superbase Files open (as 0)
  2167.     Superbase Files available.
  2168.  
  2169. If any database files are open, the header information for these files is
  2170. also shown.
  2171.  
  2172.     ? STATUS FILE sbfname
  2173.  
  2174. gives the same output as the menu option SYSTEM STATUS FILE, and
  2175.  
  2176.                 5-11
  2177.  
  2178. produces a status report for the file. At the top of the report, it shows
  2179. file statistics such as the number of records and the file size. Below this,
  2180. it shows the file definition details: for each field, it lists the field
  2181. name, its attributes, format, Form View location, and any associated
  2182. calculation or validation formula.
  2183.  
  2184. If the file is not open, the error message 'Can't do this / File not open'
  2185. appears.
  2186.  
  2187. The '?' command is optional with STATUS - using STATUS on its own has the
  2188. same effect.
  2189.  
  2190. ? TEXT
  2191. PURPOSE
  2192. Sends a text file in memory to an output device.
  2193.  
  2194. SYNTAX
  2195. ? TEXT[MERGE]
  2196.  
  2197. COMMENTS
  2198.  
  2199. This command outputs the current text file in the Text Editor. If the text
  2200. file is a form letter and its associated database file has been opened,
  2201. adding the MERGE command will merge the data in the current record with the
  2202. text file. See also the Keyword Reference entry for MERGE.
  2203.  
  2204. EXAMPLES
  2205.  
  2206. 1     OPEN FILE "Address"
  2207.       LOAD TEXT "Maillet"
  2208.     ? TEXT MERGE
  2209.  
  2210. NOTES
  2211.  
  2212. If the current output device is the screen, this example will insert the
  2213. data from the first record (in the Address file) into the Maillet text
  2214. file, and display the result in the database window.
  2215.  
  2216.                 5-12
  2217.  
  2218. ABS
  2219. PURPOSE
  2220.  
  2221. Turns negative numbers into positive numbers but leaves positive numbers
  2222. unchanged.
  2223.  
  2224. SYNTAX
  2225. ABS (nexpr)
  2226.  
  2227. COMMENTS
  2228.  
  2229. ABS returns the 'absolute' value of a number. In effect, it simply strips
  2230. the sign off a negative number, making it positive. One of its common uses
  2231. is for calculating the difference between two numbers when you do not know
  2232. which is larger. In example 2, which works out the number of days between
  2233. two dates, ABS allows you to enter the dates without first knowing which is
  2234. the later date.
  2235.  
  2236. EXAMPLES
  2237.  
  2238. 1    numfieldc=ABS (numfielda)
  2239. 2    numfieldc=ABS (datefielda-datefieldb)
  2240. 3    numfieldc>ABS (numfielda * numfieldb)
  2241. 4    x%=ABS (y%)
  2242. 5    x%=ABS (y% * numfielda * (datefielda-datefieldb))
  2243. 6    x%=ABS (VAL (RIGHT$ (textfielda, 5)))
  2244. 7    ? ABS (x%)
  2245.  
  2246.                 5-13
  2247.  
  2248. ADD
  2249. PURPOSE
  2250. Adds a new field to a file definition.
  2251.  
  2252. SYNTAX
  2253.  
  2254. ADD[FILE sbfname]field-definition-string[formula-string][formula-string]
  2255.  
  2256. COMMENTS
  2257.  
  2258. This command is used in conjunction with CREATE and MAKE to create a new
  2259. Superbase database file. It cannot be used to add a field to an existing
  2260. file. To use ADD correctly, you need to understand how a file definition is
  2261. set up. The best way to do this is to use the STATUS FILE option in
  2262. Superbase's System menu. This will show you the file definition for the
  2263. current file. Another way of viewing the same information would be to list
  2264. an '.sbd' file on screen using the System menu's LIST option.
  2265.  
  2266. With one exception, the parameters used with ADD to define a field are the
  2267. same as those used in '.sbd' file definitions. The exception is '>' and
  2268. '>>'. These are used in '.sbd' files to indicate that there are one or two
  2269. formula lines to follow. You do not need to include these characters in a
  2270. field definition string.
  2271.  
  2272. From left to right, the field definition string is composed of the
  2273. following parameters:
  2274.  
  2275. fieldname
  2276. fieldtype[other fieldtype parameters]
  2277. format[case and multiple response parameter for text fields]
  2278. row; col
  2279.  
  2280. Each of these parameters must take the same form as it does in an 'sbd'
  2281. file. fieldname must conform to the rules for fieldnames. Fieldtype must be
  2282. one of the following:
  2283.  
  2284. TXT    text
  2285. EXT    external
  2286. NUM    numeric
  2287. DAT    date
  2288.  
  2289.                 5-14
  2290.  
  2291. TIM    timefield
  2292. DEL    deleted
  2293.  
  2294. The other fieldtype parameters are optional and, if used, are separated
  2295. from fieldtype and each other by at least one space. You can specify up to
  2296. three of these parameters, selecting one from each of the following groups:
  2297.  
  2298. A)
  2299. CLC    Calculated
  2300. CLV    Calculated and validated
  2301. CON    Constant
  2302. COV    Constant and validated
  2303. VAL    Validated
  2304.  
  2305. B)
  2306. RDO    Read only
  2307. RDQ    Read only required
  2308. REQ    Required
  2309.  
  2310. C)
  2311. IXU    Indexed - Unique
  2312. IXD    Indexed - Normal
  2313.  
  2314. format specifies the length of a field and the numeric format for numeric
  2315. fields, format must be appropriate for the field type. For example, 20 for
  2316. TXT, z99999.00 for NUM, ddmmmyy for DAT.
  2317.  
  2318. The case parameter can be U, L or C, depending on whether the text data is
  2319. to shown in upper case, lower case or with the first letter capitalized.
  2320. The multiple response parameter is M followed by the number of elements in
  2321. the multiple response field (maximum 9). These parameter are optional and
  2322. can only be used with text fields. They must be separated from the field
  2323. format by at least one space. For example, to define a text field with
  2324. three multiple response fields, each up to 15 characters long, you would
  2325. enter these parameters:
  2326.  
  2327.     15 M3;
  2328.  
  2329. If you also wanted the field data to be in upper case, you would enter:
  2330.  
  2331.     15 UM3;
  2332.  
  2333. row is the row position for FORM-view (maximum 255).
  2334. col is the column position for FORM-view (maximum 255).
  2335.  
  2336.                 5-15
  2337.  
  2338. row and col are optional, but you are strongly recommended to use them. If
  2339. they are not used, all the fields will be positioned at the top left of the
  2340. screen on top of one another when the record is displayed in Form View.
  2341.  
  2342. The field types in group A-CLC, CLV, CON, COV, VAL-must be followed by a
  2343. formula or formulas. CLV and COV require two formulas; the formula for
  2344. constants or calculations should be come first, followed by the validation
  2345. formula. Formulas should be enclosed in quotation marks and must be
  2346. separated by commas from the first part of the field definition string and
  2347. from each other.
  2348.  
  2349. Formula-string must follow the rules (given in Volume 1) for using formulas
  2350. for calculations, constants and validations.
  2351.  
  2352. Since formulas must be enclosed in quotation marks, DML will be confused if
  2353. a formula itself contains quotation marks, as in:
  2354.  
  2355.     fielda LIKE "[a-c]*"
  2356.  
  2357. The simplest solution here is to use the tilde character '~' in place of
  2358. quotation marks. When you execute the ADD command, DML will interpret the
  2359. tilde as a quotation mark.
  2360.  
  2361. An alternative solution is to use the CHR$ function to insert quotation
  2362. marks the ASCII code for quotation marks is 34. Thus the line to set up a
  2363. validated field called fielda of length 12 at row 5, column 20 would be:
  2364.  
  2365.     ADD"fielda; TXT VAL; 12, 5; 20", "fielda LIKE" + CHR$ (34)
  2366.     + "[a-c]*" + CHR$ (34)
  2367.  
  2368. In the unlikely event that your formula actually requires a tilde
  2369. character,  you can insert it in a string variable using CHR$ (126).
  2370.  
  2371. Note that the maximum length for a program line is 255 characters. Since a
  2372. formula can also be up to 255 characters long, you may be unable to enter
  2373. the entire field definition on a line. The solution is to assign formulas
  2374. to string variables beforehand. For example:
  2375.  
  2376.     a$="Price.Orders * Quantity.Orders"
  2377.     ADD "Subtotal; NUM; $9999999.00; 5, 20", a$
  2378.  
  2379. EXAMPLES
  2380.  
  2381. 1 ADD "aatext; TXT REQ IXU; 20 M3; 1, 12"
  2382. 2 ADD "aanumb; NUM; z999999.00; 1, 40"
  2383. 3 ADD "bbtext; TXT CLC RD0; 10; 2, 12", "UCASE$ (LEFT$ (aatext, 10))"
  2384.  
  2385.                 5-16
  2386.  
  2387. 4 ADD "fielda; TXT VAL; 12; 15; 20", "fielda LIKE " + CHR$ (34) + "[a-c]*"
  2388.   + CHR$ (34)
  2389.  
  2390. NOTES
  2391.  
  2392. Creating a file under program control is a three stage process involving
  2393. CREATE, ADD, and MAKE. For a description of the process, see CREATE.
  2394.  
  2395. AFTER GROUP
  2396.  
  2397. PURPOSE
  2398. Set after group activity with reports.
  2399.  
  2400. SYNTAX
  2401. AFTER GROUP fieldname
  2402.  
  2403. COMMENTS
  2404.  
  2405. When you create a report using the Forms Editor's reporting facility,
  2406. Superbase generates a Report program for you. The AFTER GROUP statement is
  2407. used within a Report program to mark the start of an AFTER GROUP section.
  2408. This consists of a series of "?" statements which specify the information
  2409. that is output every time a group changes. Each statement corresponds to a
  2410. line in the AFTER GROUP box in the Forms Editor.
  2411.  
  2412. fieldname identifies the group and must be name of a field which has
  2413. previously been defined as a group with the GROUP statement. An AFTER GROUP
  2414. section must end with an END REPORT statement.
  2415.  
  2416. EXAMPLES
  2417.  
  2418. 1     AFTER GROUP Lastname.Clients
  2419.     ? BF ?Client", GROUP, "has"; COUNT amount; "Deposits"
  2420.     ? BF "Total deposits are", @25SUM amount
  2421.     ? BF "Maximum is", @s5 MAX amount
  2422.     ? BF "Minimum is", @25 MIN amount
  2423.     END REPORT
  2424.  
  2425. NOTES
  2426.  
  2427. In the second line of this example, the keyword GROUP is used in order to
  2428.  
  2429.                 5-17
  2430.  
  2431. retrieve the name of the last group. At this point, the group has already
  2432. changed; so, Lastname.Clients could not be used instead of GROUP because it
  2433. would output the name of the current group.
  2434.  
  2435. EXAMPLES
  2436.  
  2437. 1    AFTER REPORT
  2438.     ?@1, 3; UL "Statistics for the Report", UL OFF: ?
  2439.     ?"Total amount is", @30 SUM amount
  2440.     ?"Number of deposits", @30 COUNT amount
  2441.     ?"Average amount", @30 MEAN amount
  2442.     END REPORT
  2443.  
  2444. ASC
  2445. PURPOSE
  2446. Returns the ASCII value of a single character.
  2447.  
  2448. SYNTAX
  2449. ASC (strexpr)
  2450.  
  2451. COMMENTS
  2452. ASC gives a numeric value-the ASCII code-for the text character in
  2453.  
  2454.                 5-18
  2455.  
  2456. strexpr. When strexpr is longer than one character ASC returns the ASCII
  2457. code of the leftmost character of strexpr. Appendix E, Volume 1, gives the
  2458. ASCII characters and their decimal codes. The complementary function of ASC
  2459. is CHR$.
  2460.  
  2461. EXAMPLES
  2462.  
  2463. 1    numfieldc=ASC (textfielda)
  2464. 2    numfieldc=ASC (RIGHT$ (textfielda, 1))
  2465. 3    ASC (textfielda) > 64 AND ASC (textfielda) < 91
  2466. 4    x%=ASC ("A")
  2467. 5    x%=ASC (x$)
  2468. 6    x%=ASC (UCASE$ (MID$ (nextfield, 3, 1)))
  2469. 7    ?ASC (x$)
  2470.  
  2471. NOTES
  2472. Example 3 provides one way of validating a text field to ensure that the
  2473. first character is uppercase (but see FCASE$).
  2474.  
  2475. ASK
  2476. PURPOSE
  2477. Inputs a character string from the keyboard.
  2478.  
  2479. SYNTAX
  2480. ASK[pos] [string] [&length]; var/field
  2481.  
  2482. COMMENTS
  2483.  
  2484. This command allows the user to enter information from the keyboard into
  2485. the computer while a program is running. It expects the user to type in one
  2486. or more characters, and, as soon as the Return key is pressed, reads them
  2487. into a variable or a field.
  2488.  
  2489.                 5-19
  2490.  
  2491. string can be used to include a prompt message.
  2492.  
  2493. pos gives the position of the prompt text and input string. It uses the @
  2494. output format parameter to specify the column position, followed by the row
  2495. position. If pos is not given then the input string appears on the row
  2496. where the cursor is currently located.
  2497.  
  2498. &length limits the length of the input and shows the maximum length on
  2499. screen using an 'end-of-field' marker.
  2500.  
  2501. The input can be assigned to a variable or a field (in a currently open
  2502. file). If the field is not in the current file, it can be specified with
  2503. the filename extension.
  2504.  
  2505. var or field can be either string or numeric variables or fields, and they
  2506. must match the type of input expected: a string variable will accept
  2507. whatever you type in, but a numeric variables when you input non-numeric
  2508. data such as letters. The same restriction applies to numeric fields.
  2509.  
  2510. EXAMPLES
  2511.  
  2512. 1    ASK; x$
  2513. 2    ASK@2, 12"Enter a text string"; x$
  2514. 3    ASK@2, 14"Enter a 3 character word"&3; x$
  2515. 4    ASK"Enter data-Customer Code"&8Cuscode.custfile
  2516. 5    ASK"Enter a number"; n%
  2517.  
  2518. ATN
  2519. PURPOSE
  2520. Calculates an angle whose tangent is known. The result is given in radians.
  2521.  
  2522. SYNTAX
  2523. ATN (nexpr)
  2524.  
  2525.                 5-20
  2526.  
  2527. COMMENTS
  2528.  
  2529. This function works out the angle from the angle's tangent given in nexpr.
  2530. For example: TAN (0.7854) is 1.0, so ATN (1.00) returns 0.7854 rads (which
  2531. is 45 degrees). To convert radians to degrees multiply by PI/180.
  2532.  
  2533. ATN is the complementary function of TAN.
  2534.  
  2535. EXAMPLES 
  2536.  
  2537. 1    numfieldc=ATN (numfielda)
  2538. 2    x%=ATN (y%)
  2539. 3    x%=ATN (VAL (x$))
  2540. 4    ?ATN (x%)
  2541.  
  2542. BEFORE GROUP
  2543. PURPOSE
  2544. Set before group activity with reports.
  2545.  
  2546. SYNTAX
  2547. BEFORE GROUP fieldname
  2548.  
  2549. COMMENTS
  2550.  
  2551. BEFORE GROUP is used in a Report Program to mark the start of a BEFORE
  2552. GROUP section.fieldname identifies the group, and must be the name of a
  2553. field which has previously been defined as a group-in the Forms Editor, you
  2554. define a group in the SELECT box; Superbase then translates this into a
  2555. GROUP statement in a Report program.
  2556.  
  2557. The statements in the BEFORE GROUP section ar executed every time the group
  2558. changes. Typically, they would be used to display header information for
  2559. the group data which follows.
  2560.  
  2561. A BEFORE GROUP section must end with an END GROUP statement.
  2562.  
  2563.                 5-21
  2564.  
  2565. EXAMPLES
  2566.  
  2567. 1    BEFORE GROUP Lastname.Clients
  2568.     ? "Deposits for client", Lastname.Clients
  2569.     ?
  2570.     ?"Firstname Lastname Bank Amount Date"
  2571.     "--------------------------------------"
  2572.     END GROUP
  2573.  
  2574. BELL
  2575. PURPOSE
  2576. Makes a short beep.
  2577.  
  2578. SYNTAX
  2579. BELL
  2580.  
  2581. COMMENTS
  2582.  
  2583. Use this command to signal that a particular process has finished and to
  2584. attract the user's attention.
  2585.  
  2586. With Gem versions of DML, BELL issues a tone lasting 0.5 seconds. On the
  2587. Amiga, BELL does not make a sound but causes the screen to flash.
  2588.  
  2589. BLANK
  2590. PURPOSE
  2591. Creates a blank record in memory.
  2592.  
  2593. SYNTAX
  2594. BLANK[FILE sbfname]
  2595.  
  2596. COMMENTS
  2597.  
  2598. When you want to create a new record under program control, issuing a BLANK
  2599. statement is the first step in the process. It sets up an empty record
  2600. record ready for data entry. There are several ways in which you can then
  2601. enter data into the record's fields.
  2602.  
  2603. Using BLANK with ENTER, allows the user to type in the data for a new
  2604. record
  2605.  
  2606.                 5-22
  2607.  
  2608. from the keyboard. Together these two commands have the same effect as the
  2609. RECORD NEW option in the RECORD menu.
  2610.  
  2611. Alternatively, you can enter data from within a program, by assigning it
  2612. directly to the fields in the new record. Typically, this would be the
  2613. method you used to create new records by reading data in from another file
  2614. on disk.
  2615.  
  2616. EXAMPLES
  2617.  
  2618. 1    BLANK
  2619. 2    BLANK FILE"abc"
  2620. 3    BLANK
  2621.     ENTER
  2622.     STORE
  2623. 4    BLANK
  2624.     Firstname.address="John"
  2625.     Lastname.address="Smith"
  2626.     STORE
  2627.  
  2628. The first example creates a new record in the current file. Example 2
  2629. creates a new record in another open file. Example 3 creates a new record
  2630. in the current file, and allows the user to enter in the record; then it
  2631. saves the record on disk. Example 4 creates a new record, and enters data
  2632. into the fields Firstname and Lastname; then saves the record on disk.
  2633.  
  2634. BREAK
  2635. PURPOSE
  2636.  
  2637. Allows the user to interrupt or halt a program from the keyboard.
  2638.  
  2639. SYNTAX
  2640. BREAK ON/OFF
  2641.  
  2642. COMMENTS
  2643.  
  2644. BREAK ON and BREAK OFF enable and disable CTRL C. After BREAK ON (the
  2645. default condition), you can stop a program while it is running by pressing
  2646. the Control key and C at the same time. This has the same effect as
  2647. clicking on the STOP button at the bottom of the screen. CTRL C generates
  2648. error 11. If you want to include error handling routines in your programs,
  2649. you can use the ON ERROR statement to check for this error number.
  2650.  
  2651.                 5-23
  2652.  
  2653. CALL
  2654. PURPOSE
  2655. Calls a user supplied function.
  2656.  
  2657. SYNTAX
  2658. CALL function
  2659.  
  2660. COMMENTS
  2661.  
  2662. function is string expression containing a command line to be executed by
  2663. DOS or Amiga DOS. The expression should duplicate a command line that would
  2664. normally be typed at the DOS or CLI prompt. Superbase stays in memory so
  2665. there must be enough memory for the specified command to function
  2666. correctly.
  2667.  
  2668. CHAIN
  2669. PURPOSE
  2670.  
  2671. Executes another program from within a program but does not clear the first
  2672. program's variables.
  2673.  
  2674. SYNTAX
  2675.  
  2676. CHAIN filename
  2677.  
  2678. COMMENTS
  2679.  
  2680. CHAIN allows you to carry out a task by linking together a number of
  2681. programs. When a program is running, this command loads another program
  2682. from disk, and transfers control to it. The second program displaces the
  2683. first in memory but any variables that have already been set retain their
  2684. values.
  2685.  
  2686. EXAMPLES
  2687.  
  2688. 1    CHAIN "Nextprog"
  2689.  
  2690.                 5-24
  2691.  
  2692. CHR$
  2693.  
  2694. PURPOSE
  2695. Generates the character associated with an ASCII code.
  2696.  
  2697. SYNTAX
  2698. CHR$ (nexpr)
  2699.  
  2700. COMMENTS
  2701.  
  2702. CHR$ works in the opposite way to ASC. Whereas ASC takes a character and
  2703. returns its ASCII code, CHR$ generates the character from its associated
  2704. code. It is useful for handling characters which are not available from the
  2705. keyboard, such as certain characters used to control a printer.
  2706.  
  2707. nexpr must have a positive value in the range 0-255 (although not all these
  2708. values will give printable characters). A value outside this range will
  2709. give the error 'Invalid numeric parameter'. If nexpr is not an integer, the
  2710. integer part of the number is used, i.e., 65.999 is treated as 65.
  2711.  
  2712. EXAMPLES
  2713.  
  2714. 1    textfieldc=CHR$ (numfielda)
  2715. 2    textfieldc=CHR$ (INT (numfielda/256))
  2716. 3    x$=CHR$ (65)
  2717. 4    x$=CHR$ (ASC (y$)+32)
  2718. 5    FOR n%=32 to 127
  2719.     ? CHR$ (n%); 
  2720.     Next
  2721.  
  2722. NOTES
  2723.  
  2724. Example 3 stores the letter A in x$. Example 4 demonstrates one way of
  2725. turning an uppercase character into lowercase - but see LCASE$ and FCASE$.
  2726. Example 5 displays the character set on the screen. Note that it does not
  2727. display characters are non-printing characters, and some of them have
  2728. unexpected effects when you attempt to display or print them.
  2729.  
  2730.                 5-25
  2731.  
  2732. CLEAR
  2733. PURPOSE
  2734. Clears all user variables.
  2735.  
  2736. SYNTAX
  2737. CLEAR
  2738.  
  2739. COMMENTS
  2740.  
  2741. This command clears all variable assignments in memory. Using ? MEMORY
  2742. immediately after CLEAR would give no output.
  2743.  
  2744. CLOSE
  2745. PURPOSE
  2746.  
  2747. Closes an input or output channel to a text file or comms line.
  2748.  
  2749. SYNTAX
  2750. CLOSE INPUT/OUTPUT
  2751.  
  2752. COMMENTS
  2753.  
  2754. Only one input channel and one output channel can be open at a time, so you
  2755. are advised to use the CLOSE command when you have completed an I/O task.
  2756. Unless you close the current channel you will not be able to open a new
  2757. channel. CLOSE also ensure that all data in the disk buffer is written to
  2758. disk. If you have a large disk buffer and a small amount of data, you will
  2759. notice that some output commands-? LIST, for example-appear to have no
  2760. effect. What happens is that DML places the data in the buffer before
  2761. writing it to disk. It remains there until the buffer fills up-or until you
  2762. execute a CLOSE OUTPUT command. Associated commands are OPEN and INPUT.
  2763.  
  2764.                 5-26
  2765.  
  2766. EXAMPLES
  2767.  
  2768. 1    OPEN FILE "aaa" FOR OUTPUT
  2769.     FOR i%=1 to 10: ? i%, i%^2: NEXT i%
  2770.     CLOSE OUTPUT
  2771.     OPEN FILE "aaa" FOR INPUT
  2772.     getnext: INPUT LINE a$: ? a$
  2773.     IF EOF ("*") THEN GOTO getnext
  2774.     CLOSE INPUT
  2775.  
  2776. CLOSE FIELDS
  2777. PURPOSE
  2778. Closes the field list on the current file or another open file.
  2779.  
  2780. SYNTAX
  2781. CLOSE FIELDS[FILE sbfname]
  2782.  
  2783. COMMENTS
  2784.  
  2785. CLOSE FIELDS removes any restrictions on which fields are shown. If you
  2786. VIEW a record after issuing this command, all its fields will be displayed
  2787. on screen. On its own, CLOSE FIELDS closes the field list for the current
  2788. file. When FILE sbfname is added, it closes the list for that file.
  2789.  
  2790. EXAMPLES
  2791.  
  2792. 1    CLOSE FIELDS
  2793. Close field list on current file.
  2794. 2    CLOSE FIELDS FILE "abc"
  2795. Close field list for file 'abc'.
  2796.  
  2797.                 5-27
  2798.  
  2799. CLOSE FILE
  2800. PURPOSE
  2801. Closes all files or a specified file.
  2802.  
  2803. SYNTAX
  2804. CLOSE[ALL]/[FILE sbfname]
  2805.  
  2806. COMMENTS
  2807.  
  2808. CLOSE FILE works in the same way as the equivalent option in the PROJECT
  2809. menu,  but unlike the menu option it also allows you to close all the open
  2810. files in one go.
  2811.  
  2812. EXAMPLES
  2813.  
  2814. 1    CLOSE
  2815. Closes the current file.
  2816. 2    CLOSE FILE "aaa"
  2817. Closes the database file 'aaa'.
  2818. 3    CLOSE ALL
  2819. Closes all open database files.
  2820.  
  2821. CLOSE FORM
  2822. PURPOSE
  2823. Closes the current Form
  2824.  
  2825. SYNTAX
  2826. CLOSE FORM
  2827.  
  2828. COMMENTS
  2829.  
  2830. This command works in the same way as the Close Form option on the Project
  2831. Menu: it clears the current Form from memory and displays the current file
  2832. using one of the view modes.
  2833.  
  2834.                 5-28
  2835.  
  2836. CLS
  2837. PURPOSE
  2838. Clears the screen.
  2839.  
  2840. SYNTAX
  2841. CLS
  2842.  
  2843. COMMENTS
  2844.  
  2845. CLS makes the output part of the screen-the output window-blank and takes
  2846. the cursor to the top left-hand corner.
  2847.  
  2848. EXAMPLES
  2849.  
  2850. 1    CLS: ? "Now at top of cleared screen"
  2851.  
  2852. COL
  2853. PURPOSE
  2854. Returns the cursor's position across the screen.
  2855.  
  2856. SYNTAX
  2857. COL (0)
  2858.  
  2859. COMMENTS
  2860.  
  2861. Use this command to find out the column position of the screen cursor. For
  2862. the row position, see ROW
  2863.  
  2864. EXAMPLES
  2865.  
  2866. 1    x%=COL (0)
  2867. 2    ? COL (0)
  2868.  
  2869. NOTES
  2870.  
  2871. In practise, Example 2 would be pointless because the statement changes the
  2872. cursor position in the course of printing it.
  2873.  
  2874.                 5-29
  2875.  
  2876. COPY
  2877. PURPOSE
  2878. Makes a copy of a file on disk.
  2879.  
  2880. SYNTAX
  2881. COPY from.filename[, ]/[TO]to.filename
  2882.  
  2883. COMMENTS
  2884.  
  2885. Use this command either to copy a file to the same disk under a different
  2886. name, or to copy it to another disk. In the latter case, you can give the
  2887. file the same name or a new name.
  2888.  
  2889. EXAMPLES
  2890.  
  2891. 1    COPY "aaa", "bbb"
  2892. Copies 'aaa' to 'bbb'.
  2893. 2    COPY "A: aaa" TO "B: bbb"
  2894. Copies 'aaa' to drive B under the name 'bbb'.
  2895.  
  2896. COS
  2897. PURPOSE
  2898. Returns the cosine of an angle measured in radians.
  2899.  
  2900. SYNTAX
  2901. COS (nexpr)
  2902.  
  2903. COMMENTS
  2904.  
  2905. To convert an angle in degrees to radians, multiply by PI/180. Associated
  2906. functions are ATN, SIN and TAN.
  2907.  
  2908. EXAMPLES
  2909.  
  2910. 1    numfieldc=COS (numfielda)
  2911. 2    x%=COS (y%)
  2912.  
  2913.                 5-30
  2914.  
  2915. 2    x%=COS (VAL (x$))
  2916. 4    ? COS (x%)
  2917.  
  2918. CREATE
  2919. PURPOSE
  2920. Creates a new database file in memory.
  2921.  
  2922. SYNTAX
  2923. CREATE sbfname[: passwords]
  2924.  
  2925. COMMENTS
  2926.  
  2927. CREATE is only the first step in the process of building a new file. To
  2928. define the file and store it on disk you also need to use ADD and MAKE. The
  2929. whole process involves the following steps:
  2930.  
  2931. 1. CREATE sbfname
  2932. 2. ADD field
  2933. At this point the file is held in memory and you can check it with ? STATUS
  2934. sbfname.
  2935. 3. MAKE sbfname
  2936. Writes the file to disk.
  2937.  
  2938. EXAMPLES
  2939.  
  2940. 1    CREATE "Address"
  2941.     ADD "Recon; NUM CON IXU; 999999.; 0, 0", "SER (~Address~)"
  2942.     ADD "Title; TXT; 10; 1, 34"
  2943.     ADD "Firstname; TXT; 15; 3, 6"
  2944.     ADD "Lastname; TXT IXD; 20; 3, 34"
  2945.     ADD "Street; TXT; 30; 6, 6"
  2946.     ADD "City; TXT IXD; 15; 7, 6"
  2947.     ADD "Code; TXT; 12; 7, 31"
  2948.     ADD "Country; TEXT IXD; 15; 9, 6"
  2949.     MAKE "Address"
  2950.  
  2951.                 5-31
  2952.  
  2953. NOTES
  2954.  
  2955. This example shows how to set up a simple address file under program
  2956. control. The first ADD statement defines a numeric field which is
  2957. automatically assigned a record number by means of the SER function. Note
  2958. the use of the tilde character to enter the filename Address within
  2959. quotation marks. Following this,  the ADD statements define eight text
  2960. fields which will hold the name and address. Once you have defined the file
  2961. in this way, you could then enter its data under program control, using the
  2962. commands BLANK and STORE.
  2963.  
  2964. CREATE INDEX
  2965. PURPOSE
  2966. Creates a new index file.
  2967.  
  2968. SYNTAX
  2969. CREATE INDEX ON exp[FILE sbfname][TO index][UNIQUE]
  2970.  
  2971. COMMENTS
  2972.  
  2973. This command is the program equivalent of the New Index option on the
  2974. Project menu.
  2975.  
  2976. EXAMPLES
  2977.  
  2978. 1    CREATE INDEX ON aaa
  2979. 2    CREATE INDEX ON aaa.bbb UNIQUE
  2980. 'bbb' does not need to be the current file, but it must be open.
  2981.  
  2982.                 5-32
  2983.  
  2984. DATA
  2985. PURPOSE
  2986.  
  2987. Holds the data (numeric and string constants) that is accessed by a READ
  2988. statement.
  2989.  
  2990. SYNTAX
  2991. DATA constant[, constant][, ......]
  2992.  
  2993. COMMENTS
  2994.  
  2995. The values (constants) following a DATA statement must be separated by
  2996. commas and text constants must be in quotation marks.
  2997.  
  2998. Because commas are used to separate the constants in a DATA statement, they
  2999. cannot be included in a constant. If you need to insert a comma in your
  3000. DATA items, you can use CHR$ (44).
  3001.  
  3002. To insert quotation marks in a string constant, use CHR$ (34). Date values
  3003. which are to be read into date fields must be in the correct format (e.g.,
  3004. "ddmmyy" or "mmddyy") and should be enclosed in quotation marks.
  3005.  
  3006. If you intend to use the RESTORE statement, you need to place a label in
  3007. front of the DATA statement.
  3008.  
  3009. EXAMPLES
  3010.  
  3011. 1    DATA "abcde", 1.04, 2.46, "uvwxyz"
  3012.     data1: DATA 12.2, 12.4, 12.97, 13.4, 9.2, -1
  3013.  
  3014.                 5-33
  3015.  
  3016. DATE$
  3017. PURPOSE
  3018. Returns a string from a julian date number.
  3019.  
  3020. SYNTAX
  3021. DATE$ (nexpr[, format-string])
  3022.  
  3023. COMMENTS
  3024.  
  3025. This function expresses a date number as a text string showing the day,
  3026. month and year. The format-string option is used to specify the date format
  3027. for the text string. It must be a valid Superbase format as shown in the
  3028. entry for DATEBASE.
  3029.  
  3030. If the format is given, the text string takes the date format as set with
  3031. the Date Format option on the Set menu, or as specified with the DATEBASE
  3032. command. The complementary function to DATE$ is DAYS. Associated date
  3033. functions are DAY DAYS DAY$ MONTH MONTH$ YEAR.
  3034.  
  3035. EXAMPLES
  3036.  
  3037. 1    textfieldc=DATE$ (datefielda, "ddmmyy")
  3038. 2    textfieldc=DATE$ (datefielda + 90)
  3039. 3    textfieldc=DATE$ (TODAY)
  3040. 4    x$=DATE$ (y%)
  3041. 5    ? DATE$ (datefielda + 30)
  3042.  
  3043. NOTES
  3044.  
  3045. Example 3 provides a calculation to insert the system date into a
  3046. textfield. Example 2 gives the date 90 days after the date in datefielda.
  3047. The Calendar adjustment of 1752 has been accounted for.
  3048.  
  3049. Unless you are sure that the date supplied in nexpr will always fall within
  3050. this century, you should set the date format to allow four figures for the
  3051. year; otherwise you will not be able to distinguish between 1901 and 2001.
  3052. With dates before AD 1000, the four figure year default option does not
  3053. insert
  3054.  
  3055.                 5-34
  3056.  
  3057. zeroes. AD 55, for example, is shown as 55 and not 0055. If you wish to
  3058. have four figure years-say, to line up output-add 3653048 to nexpr. As well
  3059. as ensuring that the date is always expressed as four figures, this is the
  3060. only way to access AD 0. However, early calendars were not particularly
  3061. accurate and accurate day counts between two dates cannot be relied on with
  3062. dates before AD 1400. (Superbase always gives the same answer; history,
  3063. though, is less consistent).
  3064.  
  3065. DATEBASE
  3066. PURPOSE
  3067. Sets the DATE format and TIME format.
  3068.  
  3069. SYNTAX
  3070. DATEBASE string
  3071.  
  3072. COMMENTS
  3073.  
  3074. DATEBASE allows you to specify the format with which Superbase displays the
  3075. date and time. Normally, this format only applies when you use the system
  3076. variables, TODAY and NOW. It does not affect the format of date and time
  3077. fields,  as set in the file definition. This means that if you define a
  3078. date field with the format "dd-mmm-yy", the command
  3079.  
  3080.     ? datefield
  3081.  
  3082. will display it in this format, irrespective of what the DATEBASE format
  3083. is. However, you can force Superbase to display a date field in the current
  3084. date format by enclosing the field name in parentheses, as in:
  3085.  
  3086.     ? (datefield)
  3087.  
  3088. string must have a valid date or time format, as shown in the examples
  3089. below.
  3090.  
  3091. EXAMPLES
  3092.  
  3093. 1    DATEBASE "dd mmmm, yyyy"
  3094. Displays the date like this as 10 June 1987
  3095. 2    DATEBASE "dd/mm/yy"
  3096. Display the date as 10/6/87
  3097.  
  3098.                 5-35
  3099.  
  3100. 3    DATEBASE "mm-dd-yy"
  3101. Displays the date as 6-10-87
  3102. 4    DATEBASE "dd.mm.yy"
  3103. Displays the date as 6.10.87
  3104. 5    DATEBASE "dd mm yy"
  3105. Displays the date as 6 10 87
  3106. 6    DATEBASE "hh:mm"
  3107. Displays the time as 14:35
  3108. 7    DATEBASE "hh:mm:ss"
  3109. Displays the timeas 14:35:08
  3110. 8    DATEBASE "hh:mm:ss.s"
  3111. Displays the time as 14:35:08.36
  3112. 9    DATEBASE "hh:mm am"
  3113. Displays the time as 2:35 pm
  3114.  
  3115. DAY
  3116. PURPOSE
  3117.  
  3118. Returns the day of the month as a numeric value from a date field or a date
  3119. string.
  3120.  
  3121. SYNTAX
  3122. DAY (nexpr)
  3123.  
  3124. COMMENTS
  3125.  
  3126. The number which DAY returns takes the numeric format as set in the SET-
  3127. NUMERIC FORMAT Superbase menu, or as set with the command DATEBASE.
  3128. Associated date functions are DATE$ DAY DAY$ MONTH MONTH$ YEAR.
  3129.  
  3130. EXAMPLES
  3131.  
  3132. 1    numfieldc=DAY (datefielda)
  3133.  
  3134.                 5-36
  3135.  
  3136. 2    numfieldc=DAY (datefielda + 90)
  3137. 3    numfieldc=DAY (TODAY)
  3138. 4    x%=DAY (datefielda + VAL (textfielda))
  3139. 5    x%=DAY (DAYS ("11 Jan 85")
  3140. 6    ?DAY (datefielda + 30)
  3141.  
  3142. NOTES
  3143.  
  3144. Examples 3 provides a calculation to insert the day number of the system
  3145. date into a numeric field.
  3146.  
  3147. DAY$
  3148. PURPOSE
  3149. Returns the day of the week as a text string from a julian date number.
  3150.  
  3151. SYNTAX
  3152. DAY$ (nexpr)
  3153.  
  3154. COMMENTS
  3155.  
  3156. Associated date functions are DATE$ DAY DAY$ MONTH MONTH$ YEAR.
  3157.  
  3158. EXAMPLES
  3159.  
  3160. 1    textfieldc=DAY$ (datefielda)
  3161. 2    textfieldc=DAY$ (datefileda + 90)
  3162. 3    textfieldc=DAY$ (TODAY)
  3163. 4    x$=DAY$ (DAYS ("11 January 1985"))
  3164. 5    x$=DAYS (y%)
  3165. 6    ?DAYS (datefielda + 30)
  3166.  
  3167.                 5-37
  3168.  
  3169. NOTES
  3170.  
  3171. Example 3 provides a calculation to insert the weekday of the system date
  3172. into a textfield. Example 4 provides a weekday for the date shown in
  3173. quotation marks.
  3174.  
  3175. DAYS
  3176. PURPOSE
  3177.  
  3178. Returns the date as a julian date number from a text string or text field.
  3179.  
  3180. SYNTAX
  3181. DAYS (strexpr) or DAYS (nexpr)
  3182.  
  3183. COMMENTS
  3184.  
  3185. This function returns a number which is the julian day number of the date
  3186. in strexpr (31 December AD 0 has a julian date value of zero). It takes the
  3187. 1752 Gregorian reform of the calendar into account.
  3188.  
  3189. strexpr must be in a valid date format.
  3190.  
  3191. A text expression which is not in one of the valid date formats will
  3192. produce a message 'invalid date format'.
  3193.  
  3194. Associated date functions are: DATE$ DAY DAY$ MONTH MONTH$ YEAR.
  3195.  
  3196. EXAMPLES
  3197.  
  3198. 1    numfieldc=DAYS (textfielda)
  3199. 2    numfieldc=DAYS (datefielda + 90)
  3200. 3    numfieldc=DAYS ("11 jan 85")
  3201. 4    x%=DAYS (a$) + 90
  3202.  
  3203. NOTES
  3204.  
  3205. In example 2, the use of DAYS is redundant.
  3206.  
  3207.                 5-38
  3208.  
  3209. DELETE
  3210. PURPOSE
  3211. Deletes a file stored on disk.
  3212.  
  3213. SYNTAX
  3214. DELETE filename
  3215.  
  3216. COMMENTS
  3217.  
  3218. This command has the same effect as the ERASE command in MS DOS and DELETE
  3219. in Amiga DOS. To delete a file on a drive or directory other than the
  3220. current one,  you need to place the path name in front of the file name.
  3221.  
  3222. EXAMPLES
  3223.  
  3224. 1    DELETE "aaa"
  3225. 2    DELETE "b: aaa"
  3226. 3    DELETE "DF0: aaa"
  3227.  
  3228. DIM
  3229. PURPOSE
  3230. Defines array variables
  3231.  
  3232. SYNTAX
  3233. DIM variablename (nexpr[, nexpr][, nexpr])
  3234.  
  3235. COMMENTS
  3236.  
  3237. Arrays can have up to three dimensions. nexpr specifies the number of
  3238. elements in each dimension of an array. The maximum number of elements is
  3239. limited only by the amount of available memory.
  3240.  
  3241. A single DIM statement can be used to define more than one array. If DIM is
  3242. used in this way, each array definiton should be separated by commas. Note
  3243. that the first element in an array dimension has the subscript 0.
  3244.  
  3245.                 5-39
  3246.  
  3247. EXAMPLES
  3248.  
  3249. 1    DIM x% (20)
  3250. Defines a one dimensional numeric array with 21 elements.
  3251. 2    DIM b$ (10)
  3252. 3    DIM x% (3, 10)
  3253. 4    DIM b$ (2, 12)
  3254. 5    DIM a$ (20), n% (2, 3, 10), c$ (2, 10)
  3255.  
  3256. DIRECTORY
  3257. PURPOSE
  3258. Changes the current directory.
  3259.  
  3260. SYNTAX
  3261. DIRECTORY "path"
  3262.  
  3263. COMMENTS
  3264.  
  3265. Directory can be used to switch to a directory on another drive or to a
  3266. different directory in the same drive.
  3267.  
  3268. EXAMPLES
  3269.  
  3270. 1    DIRECTORY "dh0: mydir/testdir"
  3271. 2    x$="a: ": DIRECTORY x$
  3272. 3    C: /Images
  3273.  
  3274.                 5-40
  3275.  
  3276. DISKSPACE
  3277. PURPOSE
  3278. Shows the amount of space remaining on a disk.
  3279.  
  3280. SYNTAX
  3281. DISKSPACE (strexpr)
  3282.  
  3283. COMMENTS
  3284.  
  3285. This function gives the number of unused bytes on a disk. On the Amiga, the
  3286. disk name given in strexpr can be either a drive name or a volume name
  3287. (i.e.,  a diskname such as Mydisk: ). Gem systems only support drive names.
  3288. On the Amiga, the diskname must end in a colon. Note also that the free
  3289. block given by the CLI are 488 byte blocks.
  3290.  
  3291. EXAMPLES
  3292.  
  3293. 1    Diskspace "df0:"
  3294. 2    DISKSPACE ("Mydisk:")
  3295. 3    x$="df1:":x%=DISKSPACE (x$)
  3296. 4    ? "Remaining diskspace is: ";  DISKSPACE ("a:"); "bytes"
  3297.  
  3298.                 5-41
  3299.  
  3300. EDIT
  3301. PURPOSE
  3302. Allows the user to edit a program, a text file, a Query, or an Update.
  3303.  
  3304. SYNTAX
  3305. EDIT [TEXT]/[QUERY]/[UPDATE]
  3306.  
  3307. COMMENTS
  3308.  
  3309. Depending on which option has been selected, EDIT displays a window or a
  3310. dialog. EDIT QUERY displays the query dialog. EDIT UPDATE displays the
  3311. update filter dialog. EDIT TEXT opens the text editor window. If none of
  3312. the three options has been selected, EDIT opens the program window. After
  3313. EDIT has opened a window or dialog, you can edit the information, just as
  3314. you would if you had selected one of the Edit options from the Superbase
  3315. menus for example, Edit Program from the Advanced menu, or Edit Query from
  3316. the Process menu. The difference is that when you exit from the window or
  3317. dialog, control returns to the program.
  3318.  
  3319. To exit from a window, close the window by clicking on the close gadget in
  3320. the top left-hand corner. You exit from a dialog by clicking on OK or
  3321. Cancel. In Superbase itself, clicking on OK takes the user out of the
  3322. dialog, and then runs the query or update; clicking on OK after EDIT returns
  3323. control to the program without executing a query or an update. (To run a
  3324. query, use ? QUERY, and use UPDATE to carry out an update.)
  3325.  
  3326.                 5-42
  3327.  
  3328. EJECT
  3329. PURPOSE
  3330.  
  3331. Ejects the current page on the printer or feeds in a new page when the
  3332. number of lines remaining is less than the number specified.
  3333.  
  3334. SYNTAX
  3335. EJECT[nexp]
  3336.  
  3337. COMMENTS
  3338.  
  3339. EJECT on its own has the same effect as pressing the Form Feed button on
  3340. the printer. It sends a Form Feed character to the printer, which then
  3341. moves the current page on and feeds in the next. If nexp is used, the page
  3342. is ejected when the number of lines at the bottom of the page is less than
  3343. nexp.
  3344.  
  3345. EXAMPLES
  3346.  
  3347. 1    EJECT
  3348. 2    EJECT 3
  3349. Feeds in a new page if there are less than three lines left at the bottom
  3350. of the current page.
  3351.  
  3352.                 5-43
  3353.  
  3354. END
  3355. PURPOSE
  3356. Terminates program execution.
  3357.  
  3358. SYNTAX
  3359. END
  3360.  
  3361. COMMENTS
  3362.  
  3363. This command brings a program to a halt and returns control to the
  3364. Superbase Menu system. END is optional and if you do not include it, DML
  3365. will return control to Superbase when it reaches the last statement in a
  3366. program.
  3367.  
  3368. EXAMPLES
  3369.  
  3370. 1    IF EOF ("aaa") THEN END
  3371.  
  3372. END GROUP
  3373. SYNTAX
  3374. END GROUP
  3375.  
  3376. PURPOSE
  3377. Marks the end of a BEFORE GROUP or AFTER GROUP section.
  3378.  
  3379. COMMENTS
  3380.  
  3381. A BEFORE GROUP or AFTER GROUP section in a Report program must end with an
  3382. END GROUP statement. If it doesn't, Superbase will be unable to tell which
  3383. statements below to which section.
  3384.  
  3385.                 5-44
  3386.  
  3387. END HEADING
  3388. PURPOSE
  3389. Marks the end of a HEADING section in a Report program.
  3390.  
  3391. SYNTAX
  3392. END HEADING
  3393.  
  3394. COMMENTS
  3395.  
  3396. A HEADING section defines the headings for a report. It must start with the
  3397. keyword HEADING, followed by one or more '?' statements which specify the
  3398. heading information. END HEADING must be placed at the end of the section.
  3399.  
  3400. END REPORT
  3401. PURPOSE
  3402. Marks the end of an AFTER REPORT or BEFORE REPORT section.
  3403.  
  3404. SYNTAX
  3405. END REPORT
  3406.  
  3407. COMMENTS
  3408.  
  3409. END REPORT must be placed at the end of the set of statements that
  3410. constitute an AFTER REPORT or BEFORE REPORT section in a Report program.
  3411. Superbase automatically generates END REPORT statements at the end of these
  3412. sections when you create a report using the Forms Editor's reporting
  3413. facility.
  3414.  
  3415.                 5-45
  3416.  
  3417. ENTER
  3418. PURPOSE
  3419.  
  3420. Allows the user to enter data in the current file or to edit the data in a
  3421. record.
  3422.  
  3423. SYNTAX
  3424. ENTER[field]/[nexpr][, nexpr2]
  3425.  
  3426. COMMENTS
  3427.  
  3428. ENTER works on the current file. Used on its own, it is equivalent to the
  3429. Record menu option Edit. It displays the current record and allows you to
  3430. edit it field by field, starting with the first field. In effect, ENTER
  3431. temporarily hands over control from DML to Superbase itself. When you press
  3432. Return after the last field in a record or when you move the cursor down to
  3433. the bottom of the record,  control is transferred back to DML. If field or
  3434. nexpr is used, Superbase restricts the editing to just one field. You can
  3435. supply either a field name or a field number where the number corresponds
  3436. to the field's position in the field list; i.e., if there are six fields in
  3437. a record, the number for the first field is 1 and the number for the last
  3438. field in 6. When you enter the record, Superbase makes the editing cursor
  3439. active in the field specified and transfers control back to DML when you
  3440. press Return. With the second numeric parameter, nexpr2, you can specify
  3441. that a range of fields is available for editing, field or nexpr1 gives the
  3442. starting point, nexpr2 gives the number of fields that can be edited - from
  3443. the first field after field on nexpr1 onwards. For example, if the command
  3444. was:
  3445.  
  3446.     ENTER 3, 5
  3447.  
  3448. you would be able to edit fields 3 to 8.
  3449.  
  3450. You may want to specify a starting point without restricting the yourself
  3451. to a given number of fields. To do this, enter 0 as the second numeric
  3452. parameter; e.g.:
  3453.  
  3454.     ENTER Lastname, 3
  3455.  
  3456. would make the cursor active in Lastname and would allow you to edit
  3457.  
  3458.                 5-46
  3459.  
  3460. Lastname and the next three fields.
  3461.  
  3462. ENTER works with the current view mode or Form. Note that if you have set
  3463. the Field Order on the Form, Superbase will take the first record (in the
  3464. order you have specified) as the starting point for data entry and editing.
  3465. When used in conjunction with BLANK, ENTER is equivalent to the Record menu
  3466. option New, and allows you to enter data into a new record. This command
  3467. does not save a record; to save a new or edited record use the command
  3468. STORE.
  3469.  
  3470. EXAMPLES
  3471.  
  3472. 1    OPEN FILE "aaa"
  3473.     ASK "Record to edit"; x$
  3474.     SELECT KEY x$
  3475.     ENTER
  3476.     STORE
  3477. 2    OPEN FILE "aaa"
  3478.     BLANK
  3479.     ENTER
  3480.     STORE
  3481. 3    ENTER Lastname
  3482. 4    ENTER 4, 2
  3483.  
  3484. Example 1 shows how to enter an existing record in order to edit it.
  3485. Example 2 creates a new record. Example 3 restricts editing to the Lastname
  3486. field. In the last example, fields 4 to 6 can be edited.
  3487.  
  3488.                 5-47
  3489.  
  3490. EOF
  3491. PURPOSE
  3492.  
  3493. Detects the end of a database file when reading through it under program
  3494. control.
  3495.  
  3496. SYNTAX
  3497. EOF (strexpr)
  3498.  
  3499. COMMENTS
  3500.  
  3501. strexpr should contain the name of a currently open file. If DML reaches
  3502. the end of a file, EOF is set to -1 (true); otherwise it is set to 0
  3503. (false). EOF is only used under program control. Supplying the empty string
  3504. as an argument-EOF ("") -allows you to refer to the current file without
  3505. giving the file name. For example, to define a function key which was
  3506. equivalent to the Fast Forward button, you would enter:
  3507.  
  3508.     WHILE NOT EOF (""): SELECT NEXT: VIEW: WEND
  3509.  
  3510. EOF can also be used to detect the end of a text file. For this purpose it
  3511. takes the string "*" as an argument, and not the file name; that is, EOF
  3512. ("*") is set to 'true' when the end of a text file is found. EOF is only
  3513. set and unset by the SELECT record selection commands excluding SELECT KEY
  3514. (which only set the FOUND function). In other words it is possible to
  3515. search through a file with a filter, and set EOF to 'true' by not finding a
  3516. record, and then to use the 'key-lookup' (SELECT KEY) to look for a record
  3517. outside the filter. If you do this, FOUND will reflect the success of the
  3518. 'key-lookup' operation, while EOF will show that you are at the end of the
  3519. file.
  3520.  
  3521. EXAMPLES
  3522.  
  3523. 1    ? EOF (x$)
  3524.     OPEN FILE "aaa"; SELECT FIRST:
  3525.     IF EOF ("aaa") THEN GOTO fempty
  3526.     loop1: SELECT NEXT: IF EOF ("aaa") THEN GOTO fend
  3527.     ....
  3528.     GOTO loop1
  3529.     fempty: ? "FILE 'aaa' has no records"; END
  3530.     fend: ? "Process completed"; END
  3531.  
  3532.                 5-48
  3533.  
  3534. ERASE
  3535. PURPOSE
  3536. Clears a variable assignment from memory.
  3537.  
  3538. SYNTAX
  3539. ERASE varlist
  3540.  
  3541. COMMENTS
  3542.  
  3543. This command clears a variable or a list of variables from memory. If
  3544. several variables are to be cleared, varlist should contain a list of
  3545. variable names separated by commas. If you specify the name of an array,
  3546. ERASE clears all the elements in the array (it also clears any other
  3547. variable with the same name as the array).
  3548.  
  3549. EXAMPLES
  3550.  
  3551. 1    ERASE x$
  3552. 2    ERASE a%, b%, c%, d%, a$, b$
  3553. 3    a$="Fred"
  3554.     a%=2.35
  3555.     MEMORY
  3556.     ERASE a$
  3557.     MEMORY
  3558.  
  3559. NOTES
  3560.  
  3561. The most obvious use for this command is to tidy up the variables in memory
  3562. before CHAINing another program or before OUTPUT TO "aaa" MEMORY. You could
  3563. then use SET "aaa" to pass some values to variables in the new program.
  3564.  
  3565.                 5-49
  3566.  
  3567. ERR$
  3568. PURPOSE
  3569. Returns the text message associated with an error number.
  3570.  
  3571. SYNTAX
  3572. ERR$ (nexpr)
  3573.  
  3574. COMMENTS
  3575.  
  3576. This function returns a text string containing the error message associated
  3577. with the error number given in nexpr. Use this function in conjunction with
  3578. the control flow commands ON ERROR and RESUME, and the system variable
  3579. ERRNO.
  3580.  
  3581. EXAMPLES
  3582.  
  3583. 1    ? ERR$ (ERRNO)
  3584.     CLS: NUMBASE "z9999"
  3585.     FOR i%=1 to 130
  3586.     ? "Error number"; i%, " "; ERR$ (i%)
  3587.     NEXT i%
  3588. 3    x$=ERR$ (14)
  3589.  
  3590. Example 2 displays a list of error numbers with their associated error
  3591. messages.
  3592.  
  3593. ERRNO
  3594. PURPOSE
  3595. Returns the number of the last error that occurred.
  3596.  
  3597. SYNTAX
  3598. ERRNO
  3599.  
  3600. COMMENTS
  3601.  
  3602. ERRNO is used in conjunction with the error handling commands ON ERROR and
  3603. RESUME and with the function ERR$ which gives the error message associated
  3604. with
  3605.  
  3606.                 5-50
  3607.  
  3608. an error number.
  3609.  
  3610. EXAMPLES
  3611.  
  3612. 1    x%=ERRNO
  3613. 2    ? ERR$ (ERRNO)
  3614.  
  3615. NOTES
  3616. Example 2 displays the error message associated with the last error which
  3617. occurred.
  3618.  
  3619. EXECUTE
  3620. PURPOSE
  3621. Executes a text string as though it were a command.
  3622.  
  3623. SYNTAX
  3624. EXECUTE string
  3625.  
  3626. COMMENTS
  3627.  
  3628. Any set of commands, statements, and functions that can be carried out as a
  3629. single program line can be placed in a string and then executed.
  3630.  
  3631. EXAMPLES
  3632.  
  3633. 1    EXECUTE "SELECT CURRENT: VIEW: WAIT FOR 5"
  3634.     y$="REQUEST ~ OK/CANCEL Requestor ~, ~~, 1"
  3635.     EXECUTE y$
  3636.  
  3637. NOTES
  3638.  
  3639. Example 2 suggests a way of using this function to set up a user-defined
  3640. dialog which can be called from different points in a program. Note the use
  3641. of the tilde character to embed quotation marks in a string.
  3642.  
  3643.                 5-51
  3644.  
  3645. EXP
  3646. PURPOSE
  3647. Returns the value of the mathematical constant 'e' raised to a power.
  3648.  
  3649. SYNTAX
  3650. EXP (nexpr)
  3651.  
  3652. COMMENTS
  3653.  
  3654. EXP gives the value of 'e' to the power of expr.
  3655. nexpr has a maximum absolute value of 709.7827128934, and a range of
  3656. -709.7827128934 to + 709.7827128934. This in turn gives the largest number
  3657. that Superbase can hold - 1.797693134862 times 10 to the power 308.
  3658.  
  3659. EXAMPLES
  3660.  
  3661. 1    numfieldc=EXP (numfielda)
  3662. 2    numfieldc=EXP (datefielda-datefield)
  3663. 3    numfieldc > EXP (numfielda & numfield)
  3664. 4    x%=EXP (y%)
  3665. 5    x%=EXP (y% * numfielda * (datefielda-datefield))
  3666. 6    x%=EXP (VAL (RIGHT$ (textfielda, 5)))
  3667. 7    ? EXP (x%)
  3668.  
  3669.                 5-52
  3670.  
  3671. EXPORT
  3672. PURPOSE
  3673. Exports data to an external text file from the current file.
  3674.  
  3675. SYNTAX
  3676. EXPORT[FILE sbfname[INDEXindex][TO]filename
  3677. [WHEREconditions] [USINGparams]
  3678.  
  3679. COMMENTS
  3680.  
  3681. This command is the program equivalent of the EXPORT option in the PROCESS
  3682. menu. It creates a text file on disk using the data from an sbf file. The
  3683. only compulsory parameter is filename, which gives the name of the text
  3684. file. If FILE sbfname is not specified, EXPORT takes data from the current
  3685. open file. Similarly, unless INDEX indexname is given, the command exports
  3686. records in the order of the current index. WHERE conditions allows you to
  3687. creates a filter to determine which records are copied to the text
  3688. file.conditions is set up in the same way as the command string in the
  3689. Filter requestor. USING parameters allows you to change the Export/Import
  3690. parameters as specified by SET-OPTIONS. These determine what characters
  3691. Superbase uses to separate fields and records in the text file. You can
  3692. also specify whether text fields are exported with or without quotation
  3693. marks around them. USING takes three parameters, each enclosed by quotation
  3694. marks and separated by commas. For example:
  3695.  
  3696.     USING "&", "$$", "0"
  3697.  
  3698. The first two parameters specify the field separation characters and the
  3699. record separation characters. As in SET-OPTIONS, you can define a separator
  3700. using one character or two characters. The third parameter must be either 0
  3701. or 1; 0 for no quotation marks,  1 to include quotation marks.
  3702.  
  3703.                 5-53
  3704.  
  3705. If you want to use a non-printing character-the carriage return character
  3706. or the line feed character, for example-as a separator, you need to enter
  3707. its ASCII code with the CHR$ function. For example:
  3708.  
  3709.     USING "&", CHR$ (13) + CHR$ (10), "0"
  3710.  
  3711. defines the record separator as the carriage return character followed by
  3712. the line feed character.
  3713.  
  3714. EXAMPLES
  3715.  
  3716. 1    EXPORT "aaa.exp"
  3717. 2    EXPORT FILE "aaa" INDEX fielda TO "aaa.exp" WHERE
  3718.     (datefield) < DAYS ("29 Apr 87")
  3719. 3    EXPORT FILE "aaa" TO "aaa.exp" USING "&", "##", "1"
  3720.  
  3721.                 5-54
  3722.  
  3723. FCASE$
  3724. PURPOSE
  3725. Converts the first letter of a string to upper case, leaving the rest of
  3726. the string in lower case.
  3727.  
  3728. SYNTAX
  3729. FCASE$ (strexpr)
  3730.  
  3731. COMMENTS
  3732.  
  3733. FCASE$ takes a word and makes the first letter a capital letter. Associated
  3734. functions are LCASE$ and UCASE$.
  3735.  
  3736. EXAMPLES
  3737.  
  3738. 1    textfielda=FCASE$ (textfielda)
  3739. 2    x$=FCASE$ (y$)
  3740. 3    x$=FCASE$ ("ABCDEF")
  3741. 4    ? FCASE$ (x$)
  3742.  
  3743.                 5-55
  3744.  
  3745. FILE
  3746. PURPOSE
  3747. Marks an open file the current file.
  3748.  
  3749. SYNTAX
  3750. FILE sbfnam
  3751.  
  3752. COMMENTS
  3753.  
  3754. When several files have been opened, you can use FILE to make one of them
  3755. the current file.
  3756.  
  3757. EXAMPLES
  3758.  
  3759. 1    FILE "aaa"
  3760. 2    x$="bbb": FILE x$
  3761. 3    a$="address": b$="bank"
  3762.     OPEN FILE a$: SELECT FIRST
  3763.     OPEN FILE b$: SELECT FIRST
  3764.     PAGING OFF
  3765.     f$=b$
  3766.     lab1: VIEW: WAIT x$
  3767.     IF EOF (a$) OR EOF (b$) THEN END
  3768.     IF f$=b$ THEN f$=a$ ELSE f$=b$
  3769.     FILE f$: SELECT NEXT
  3770.     GOTO lab1
  3771.  
  3772. NOTES
  3773.  
  3774. The third example shows how you can display records from two (or more)
  3775. files at the same time. It displays one record after another, alternating
  3776. between two files until it reaches the end of the shorter file.
  3777.  
  3778.                 5-56
  3779.  
  3780. FIX
  3781. PURPOSE
  3782.  
  3783. Sets the accuracy with which DML stores a number and performs calculations
  3784. on it.
  3785.  
  3786. SYNTAX
  3787. FIX (nexpr1, nexpr2)
  3788.  
  3789. COMMENTS
  3790.  
  3791. FIX allows you to limit a numeric expression to a specified number of
  3792. decimal places. nexpr2 is the number of decimal places that nexpr1 is
  3793. evaluated at. Superbase stores numeric variables at 13 figure accuracy, so
  3794. the fraction 1/3 is stored as 0.3333333333333. Adding two of these together
  3795. gives 0.6666666666667. If you set the numeric format to two decimal places
  3796. in a file definition,  Superbase would show this result as: 0.33 +
  3797. 0.33=0.67. This is not incorrect, especially if you are a scientist or
  3798. engineer, but it is not very helpful if you are using a Query to produce an
  3799. invoice. FIX (1/3, 2) stores the fraction 1/3 as 0.330000000000, so FIX
  3800. (1/3, 2) + FIX (1/3, 2) gives result as 0.66. Note that numeric fields with
  3801. two decimal places are automatically FIXed.
  3802.  
  3803. EXAMPLES
  3804.  
  3805. 1    numfieldc=FIX (numfielda, 3)
  3806. 2    numfieldc=FIX (datefielda-datefieldb, 0)
  3807. 3    numfieldc > FIX (numfielda * numfieldb, 4)
  3808. 4    $x=FIX ($y, 2)
  3809. 5    $x=FIX ($y * numfielda * (datefielda-datefieldb), 2)
  3810. 6    $x=FIX (VAL (RIGHT$ (textfielda, 5)), 2)
  3811. 7    ? FIX ($x)
  3812.  
  3813.                 5-57
  3814.  
  3815. FOOTING
  3816. PURPOSE
  3817. Sets the Report footing for every page.
  3818.  
  3819. SYNTAX
  3820. FOOTING nexpr
  3821.  
  3822. COMMENTS
  3823.  
  3824. FOOTING is followed by a number of ? statements specifying the information
  3825. that will appear at the bottom of every page in a report. These must be
  3826. followed by an END FOOTING statement. nexpr specifies the number of lines
  3827. required for the report footing. Make sure that the number of lines output
  3828. by your ? statements is the same as the number specified by nexpr.
  3829.  
  3830. EXAMPLES
  3831.  
  3832. 1    FOOTING 1
  3833.     ? "Page"; PG
  3834.     END FOOTING
  3835.  
  3836. NOTES
  3837. This examples uses the system variable PG to print the page number. See the
  3838. entry HEADING for more details.
  3839.  
  3840. FOR TO NEXT
  3841. PURPOSE
  3842. Repeats a series of program statements a specified number of times.
  3843.  
  3844. SYNTAX
  3845. FOR var=nexp1 TO nexp2[STEP nexp3]statements NEXT[var][, var]...
  3846.  
  3847. COMMENTS
  3848.  
  3849. This command sets up a program loop in which the statements between FOR TO
  3850. and NEXT are executed a given number of times, using var as a counter.
  3851. nexp1 sets the initial value of the counter and nexp2 sets the final value.
  3852.  
  3853.                 5-58
  3854.  
  3855. If STEP nexp3 is not included, the counter is increased by one every time
  3856. the program executes the statements inside the loop; that is, every time it
  3857. passes from FOR to NEXT. When the counter reaches the value set in nexp3,
  3858. the program moves on to the next statement after NEXT. When STEP nexp3 is
  3859. included, the program increases the counter by the amount specified in
  3860. nexp3. var must be a numeric variable; nexp1, nexp2, nexp3 can be any
  3861. numeric expression,  including other numeric variables. You can use FOR TO
  3862. NEXT on the same line with multiple statements, or on multiple lines. But
  3863. if there is more than one statement between FOR and NEXT, it is advisable
  3864. to put each on a separate line. If a number of FOR NEXT loops end at the
  3865. same point, you can use a single NEXT statement for all of them.
  3866.  
  3867.     NEXT n%, y%, z%
  3868.  
  3869. is the same as
  3870.  
  3871.     NEXT n%
  3872.     NEXT y%
  3873.     NEXT z%
  3874.  
  3875. EXAMPLES
  3876.  
  3877. 1    FOR i%=1 to 10: ? i%, i% ^ 2: NEXT
  3878. 2    weekcount%=1
  3879.     FOR i%=DAYS ("01/01/87") TO DAYS ("31/03/87") STEP 7
  3880.     FOR j%=0 to 6: k%=i% + j%
  3881.     ? DAY (k%); " "; MONTH$ (k%), DAY$ (k%)
  3882.     NEXT j%
  3883.     weekcount%=weekcount% + 1
  3884.     NEXT i%
  3885.  
  3886. Example 2 prints out the weekdays for the first quarter of 1987 in weeks.
  3887.  
  3888.                 5-59
  3889.  
  3890. FORM
  3891. PURPOSE
  3892. Specifies which part of a Form is displayed in the database window.
  3893.  
  3894. SYNTAX
  3895. FORM page[, row, col]
  3896.  
  3897. COMMENTS
  3898.  
  3899. This command is used to select a particular page within a multi-page form
  3900. or to bring part of a page that is outside the database window into view.
  3901. page must be a numeric expression specifying the page number.row and col
  3902. must be numeric expressions which give a row and column position within the
  3903. page. Form will then move the page so that the specified position is at the
  3904. top left-hand corner of the database window.
  3905.  
  3906. EXAMPLES
  3907.  
  3908. 1    FORM 2
  3909. Selects page 2 in the Form currently displayed.
  3910. 2    FORM 1, 24, 1
  3911. Makes row 24, column 1 of page 1 appear at the top left-hand corner of the
  3912. database window.
  3913.  
  3914. FOUND
  3915. PURPOSE
  3916. Detects whether a key lookup has been successful or not.
  3917.  
  3918. SYNTAX
  3919. FOUND (strexpr)
  3920.  
  3921. COMMENTS
  3922.  
  3923. After you have issued a SELECT KEY command to search for a particular
  3924. record,  FOUND will tell you whether the record has been found. If the
  3925. search is successful, FOUND returns a value of -1 (true); if the search is
  3926. unsuccessful, 
  3927.  
  3928.                 5-60
  3929.  
  3930. FOUND returns 0.
  3931. strexpr should contain the file name of '.sbf' file which has already been
  3932. opened. However, you can use the empty string-as in FOUND ("") -to refer to
  3933. the current file. FOUND is only set and cleared by the SELECT KEY and
  3934. LOOKUP commands.
  3935.  
  3936. EXAMPLES
  3937.  
  3938. 1    SELECT KEY "London"
  3939.     ? FOUND ("")
  3940. 2    a$="Clients": SELECT KEY "Smith" FILE a$
  3941.     IF FOUND (a$) THEN ? "Smith found" ELSE ? "No Smiths"
  3942.  
  3943. FREE
  3944. PURPOSE
  3945. Returns the amount of free memory.
  3946.  
  3947. SYNTAX
  3948. FREE (nexpr)
  3949.  
  3950. COMMENTS
  3951.  
  3952. This function returns a number showing how much free memory there is. On
  3953. the Amiga, nexpr determines whether the figure refers to chip, contiguous
  3954. or fast memory.
  3955.  
  3956. 0=total free memory
  3957. 2=chip memory
  3958. 4=fast memory
  3959.  
  3960. Adding 2^17 to one of these parameters gives the largest block of memory in
  3961. its respective memory area. So, 2^17 + 2 gives the maximum area of
  3962. contiguous chip memory.
  3963.  
  3964. EXAMPLES
  3965.  
  3966. 1    ? FREE (0)
  3967. 2    x%=FREE (i%)
  3968.  
  3969.                 5-61
  3970.  
  3971. GET
  3972. PURPOSE
  3973. Gets a character from the keyboard.
  3974.  
  3975. SYNTAX
  3976. GET strvar/field
  3977.  
  3978. COMMENTS
  3979.  
  3980. This command reads a character from the keyboard into a string variable or
  3981. a text field. It does not wait for a keystroke, and if no key is pressed it
  3982. returns an empty string. If you want GET to wait until a key is pressed,
  3983. you need to place it in a loop, as in:
  3984.  
  3985.     LABEL: GET A$: IF A$=: ""  GOTO LABEL
  3986.  
  3987. Alternatively, use the WAIT command.
  3988.  
  3989. GOSUB
  3990. PURPOSE
  3991. Calls a procedure or subroutine.
  3992.  
  3993. SYNTAX
  3994. GOSUB label
  3995.  
  3996. COMMENTS
  3997.  
  3998. Like the GOTO statement, GOSUB transfers control to a different part of the
  3999. program: it causes the program to branch to the label specified. But unlike
  4000. GOTO, it remembers where it branched from. When the program meets a RETURN
  4001. statement, it jumps back to the line following the GOSUB statement. GOSUB
  4002. is used to call a subroutine; that is, one or more program lines which
  4003. perform a specific task and can be called from different places within the
  4004. main program. Subroutines are useful if the same task needs to be performed
  4005. at several different stages in the program. Instead of repeating a group of
  4006. lines,  it saves space and is more convenient to put them in a subroutine.
  4007.  
  4008.                 5-62
  4009.  
  4010. In DML, a subroutine is defined by a label at the beginning and a RETURN
  4011. statement at the end.
  4012.  
  4013. EXAMPLES
  4014.  
  4015. 1    GOSUB sub1
  4016. 2    x$=Address (1): GOSUB label1
  4017.     x$=Address (2): GOSUB label1
  4018.     .....
  4019.     .....
  4020.     .....
  4021.     label1:
  4022.     ? "This subroutine outputs x$ to the printer"
  4023.     PRINT x$
  4024.     DISPLAY;
  4025.     RETURN
  4026.  
  4027. GOTO
  4028. PURPOSE
  4029. Transfers control to another part of the program.
  4030.  
  4031. SYNTAX
  4032. GOTO label
  4033.  
  4034. COMMENTS
  4035.  
  4036. This statement makes the program jump to the label specified, instead of
  4037. continuing to the next line in the program. It alters the order in which
  4038. DML executes a program. This kind of control transfer is called an
  4039. unconditional jump. For conditional jumps, see the ON GOTO and the IF THEN
  4040. ELSE statement.
  4041.  
  4042. EXAMPLES
  4043.  
  4044. 1    GOTO fred
  4045.     ....
  4046.     ....
  4047.     fred:....
  4048.  
  4049.                 5-63
  4050.  
  4051. GROUP
  4052. PURPOSE
  4053.  
  4054. Specifies the field on which a report is grouped and the field (s) for
  4055. which subtotal reporting is required.
  4056.  
  4057. SYNTAX
  4058. GROUP fieldname [, fieldname] [.....]
  4059.  
  4060. COMMENTS
  4061.  
  4062. Superbase insets a GROUP statement in a report program when you specify
  4063. fields with the GROUP option on the Forms Editor's Report menu. GROUP has
  4064. two main functions. First, it defines the field on which Superbase groups
  4065. data in a report. Second, it specifies any other fields for which
  4066. subtotals-or other reporting features such as MAX and MEAN-are required. If
  4067. you wish to specify several levels of grouping, you should enter a separate
  4068. GROUP statement for each level. GROUP can also be used in an AFTER GROUP
  4069. section as a reference for the field which defines the group. Since the
  4070. group has already changed, entering the field name would output the data
  4071. for the next group; GROUP allows you to retrieve the data for the previous
  4072. group-i.e., the group for which the AFTER GROUP section provides reporting
  4073. information such as subtotals and record counts.
  4074.  
  4075. EXAMPLES
  4076.  
  4077. 1    GROUP City, amount
  4078. 'City' is field on which the report is grouped, 'amount' is a field for
  4079. which subtotals are required-the AFTER GROUP section may include the
  4080. statement:
  4081.     SUM amount
  4082. 2    GROUP Country
  4083.     GROUP City, amount
  4084.  
  4085. In this example, record data is grouped at two levels: City within Country.
  4086.  
  4087.                 5-64
  4088.  
  4089. HEADING
  4090. PURPOSE
  4091. Sets the Report heading for each page.
  4092.  
  4093. SYNTAX
  4094. HEADING
  4095.  
  4096. COMMENTS
  4097.  
  4098. Superbase generates a HEADING statement when you specify a report heading
  4099. using the Heading option on the Forms Editor's Report menu. This statement
  4100. marks the start of a HEADING section and is followed by one or more
  4101. statements which define the heading for a report. The section must end with
  4102. an END HEADING statement. If you wish to include the page number in a
  4103. heading, use the system variable PG, as in:
  4104.  
  4105.     ? @32, "Page"; PG
  4106.  
  4107. PG is set to one when the Report Select command is executed and incremented
  4108. by one after each page.
  4109.  
  4110. EXAMPLES
  4111.  
  4112. 1    HEADING
  4113.     ? @22; BF; U; "DEPOSITS REPORT on", TODAY, "at", NOW; ATTR
  4114.     OFF
  4115.     END HEADING
  4116.  
  4117. HOME
  4118. PURPOSE
  4119. Takes the cursor to the top left-hand corner of the screen.
  4120.  
  4121. SYNTAX
  4122. HOME
  4123.  
  4124. COMMENTS
  4125.  
  4126. Home moves the cursor to the top of the screen without clearing the screen.
  4127. The next screen output will now appear at that position.
  4128.  
  4129.                 5-65
  4130.  
  4131. HOME is useful when you want to overwrite something you have previously
  4132. displayed on screen, or when you want to move the cursor up the screen or
  4133. backwards. Normally, if you attempt to do this with LOCATE or using the @
  4134. parameter with the ? command, DML displays the next page. HOME allows you
  4135. to display text and numbers anywhere on screen, no matter what has been
  4136. displayed previously.
  4137.  
  4138. EXAMPLES
  4139.  
  4140. 1    CLS
  4141.     FOR r%=1 to 18
  4142.     FOR c%=1 to 80
  4143.     HOME: LOCATE c%, r%: ? "Hello"
  4144.     NEXT
  4145.     NEXT
  4146.  
  4147. HRS
  4148. PURPOSE
  4149.  
  4150. Extracts the number of hours from a numeric expression containing the time
  4151. in thousandths of a second.
  4152.  
  4153. SYNTAX
  4154. HRS (nexpr)
  4155.  
  4156. COMMENTS
  4157.  
  4158. nexpr will usually be a time field or the result of a TIMEVAL expression.
  4159.  
  4160. EXAMPLES
  4161.  
  4162. 1 hr%=HRS (timefield)
  4163.  
  4164. IF THEN ELSE
  4165. PURPOSE
  4166. Executes a statement if a condition is true.
  4167.  
  4168. SYNTAX
  4169. IF exp THEN statements[END IF][ELSE statements][END IF]
  4170.  
  4171.                 5-66
  4172.  
  4173. COMMENTS
  4174.  
  4175. exp can be any expression-string, numeric or logical-which is capable of
  4176. being true or false. For example, A$="Smith" is either true or false, so:
  4177.  
  4178.     IF A$="Smith" THEN...
  4179.  
  4180. is a valid statement, but
  4181.  
  4182.     IF A$ THEN...
  4183.  
  4184. is not.
  4185.  
  4186. If exp is true, DML executes the statement or statements after THEN.
  4187. Otherwise it proceeds to the next statement after the IF THEN statement.
  4188. THEN can be omitted when it is followed by GOTO. For example:
  4189.  
  4190.     IF exp GOTO label
  4191.  
  4192. is the same as
  4193.  
  4194.     IF exp THEN GOTO label
  4195.  
  4196. By including the ELSE option, you can instruct DML to choose between two
  4197. courses of action. It executes the statements after THEN if exp is true; if
  4198. exp is false, it executes the statements after ELSE. An IF THEN ELSE
  4199. statement can be split up so that it is placed on several lines. If you do
  4200. this, the statements after THEN must start on a new line, and ELSE must
  4201. also start on a new line. For example:
  4202.  
  4203.     IF x% > y% THEN ? "Greater than" ELSE ? "Less than or equal"
  4204.  
  4205. can be written as:
  4206.  
  4207.     IF x% > y% THEN
  4208.     ? "Greater than"
  4209.     ELSE
  4210.     ? "Less than or equal"
  4211.     END IF
  4212.  
  4213. END IF marks the end of the IF THEN ELSE statement. It should always be
  4214. used when ELSE is placed on a separate line. If it is not used, DML assumes
  4215. that all the separate line statements in the rest of the program belong to
  4216. ELSE.
  4217.  
  4218.                 5-67
  4219.  
  4220. END IF is also used when the ELSE option has not been selected, but the
  4221. statements following THEN are placed on separate lines. For example:
  4222.  
  4223.     IF b$="Yes" THEN n%=1: z%=2: GOSUB label
  4224.  
  4225. can be written:
  4226.  
  4227.     IF b$="Yes" THEN
  4228.     n%=1
  4229.     z%=2
  4230.     GOSUB label
  4231.     END IF
  4232.     .....
  4233.     .....
  4234.  
  4235. Here too, END IF is used to tell DML where the statements belonging to THEN
  4236. finish. exp does not always need to contain an operator. Remember that DML
  4237. assigns a value of 0 to false expressions and -1 to true expressions. With
  4238. IF THEN commands, though, DML treats a numeric expression with any value
  4239. other than zero as true. And it treats a numeric expression with any value
  4240. other than -1 as false.
  4241.  
  4242.     IF EOF ("") THEN .....
  4243.  
  4244. implies:
  4245.  
  4246.     IF EOF ("") <> 0 THEN...
  4247.  
  4248. Likewise, 
  4249.  
  4250.     IF NOT EOF ("") THEN...
  4251.  
  4252. implies
  4253.  
  4254.     IF EOF ("") <> -1 THEN
  4255.  
  4256. EXAMPLES
  4257.  
  4258. 1    IF exp THEN x%=x% + 1
  4259.     IF exp THEN x$="TRUE"
  4260.     IF exp THEN x%=x% + 1: x$="TRUE"
  4261.     IF exp THEN labltrue
  4262.     IF exp THEN GOTO labltrue
  4263. 2    IF exp THEN x$="TRUE" ELSE x$="FALSE"
  4264.     IF exp THEN x$="TRUE": x% + 1 ELSE x$="FALSE"
  4265.     IF exp THEN labltrue ELSE lablfalse
  4266.  
  4267.                 5-68
  4268.  
  4269.     IF exp THEN GOTO labltrue ELSE GOTO lablfalse
  4270. 3    IF b$=MID$ (a$, 3, 1)THEN
  4271.     x%=1
  4272.     GOSUB label1
  4273.     ELSE
  4274.     x%=2
  4275.     GOSUB label2
  4276.     END IF
  4277. 4    IF a$="Y" or a$="y" THEN
  4278.     ? "Yes"
  4279.     ELSE
  4280.     IF a$="N" or a$'"n" THEN
  4281.     ? "No"
  4282.     ELSE
  4283.     ? "Other"
  4284.     END IF
  4285.  
  4286. NOTES
  4287.  
  4288. Example 4 shows how IF THEN statements can be nested. In this case, the
  4289. second IF THEN statement is only executed if the condition in the first
  4290. statement gives a false result.
  4291.  
  4292. IMPORT
  4293. PURPOSE
  4294. Imports an external text file into an open file.
  4295.  
  4296. SYNTAX
  4297. IMPORT filename [TO FILEsbname] [WHERE conditions] [USING parameters]
  4298.  
  4299. COMMENTS
  4300.  
  4301. This command imports the ASCII text file specified by filename into the
  4302. current file or into the file specified by sbfname. It works in the same
  4303. way the IMPORT option in the PROCESS menu. IFTOFILE sbfname is not
  4304. specified, the text file is imported into the current open file. If it is
  4305. specified, sbfname must be an open file.
  4306.  
  4307.                 5-69
  4308.  
  4309.  
  4310. End Of Part 1
  4311.  
  4312.